Golang中的runtime.LockOSThread的优点

Golang支持LockOSThread()使当前的goroutine与当前OS线程完全绑定,并且还可以使用UnlockOSThread().

有没有从这个功能中受益的用例?

使用Go线程模型,调用C代码,汇编代码或阻塞系统调用发生在与Go运行时调度程序管理的调用Go代码相同的线程中.

当Go必须与一些外部库(例如C库)接口时,os.LockOSThread()机制非常有用.它保证在同一个线程中对这个库进行几次连续的调用.

这在几种情况下很有意思

>一些graphic libraries(OS X Cocoa,OpenGL,SDL,…)要求在特定线程(或某些情况下主线程)上完成所有调用.
>一些外国图书馆是基于thread local storage(TLS)的设施.他们将一些上下文存储在连接到线程的数据结构中.或者API的一些功能提供其内存生命周期附加到线程的结果.这个概念用于Windows和类Unix系统中.一个典型的例子是在C库中常用的存储错误代码的errno全局变量.在支持多线程的系统上,errno通常定义为线程局部变量.>更一般地,一些外国图书馆可能会使用线程标识符来索引/管理内部资源.

相关文章

程序目录结构 简单实现,用户登录后返回一个jwt的token,下次请求带上token请求用户信息接口并返回信息...
本篇博客的主要内容是用go写一个简单的Proof-of-Work共识机制,不涉及到网络通信环节,只是一个本地的简...
简介 默克尔树(MerkleTree)是一种典型的二叉树结构,其主要特点为: 最下面的叶节点包含存储数据或其...
接下来学习并发编程, 并发编程是go语言最有特色的地方, go对并发编程是原生支持. goroutine是go中最近本...
先普及一下, 什么是广度优先搜索 广度优先搜索类似于树的层次遍历。从图中的某一顶点出发,遍历每一个顶...
第一天: 接口的定义和实现 第二天: 一. go语言是面向接口编程. 在学习继承的时候说过, go语言只有封装,...