C++11中std::mutex问题

C++语言 码拜 8年前 (2016-09-13) 2575次浏览
1、对于WINDOWS,该函数底层能否调用CreateMutex,还是使用临界区
2、能否只有std::thread的线程可以使用其达到互斥,还是其他方式创建的线程也可以使用
解决方案

140

1、没有调用,应该是参照Linux方式实现的
2、其他方式的也可

10

既然是标准库,就是各平台都展示给你相同的类库和接口,你只管用它就行了,它内部的调用才是与平台相关的。假如WIN提供了你源码,你翻开源码看就得了;假如没提供源码,那么它内部是用互斥锁还是临界区甚至事件来实现,这个重要吗?它代表的就你只管用std::mutex提供的方法即可。实现想知道可以去翻boost的实现源码,boost貌似是用event事件实现的mutex。
std::thread也是如此,管它内部是_beginthread还是CreateThread,都是封装来的。
std::mutex可以用于线程同步,不管是什么方式创建的线程

20

1.标准库的实现对于windows平台使用mutex还是critical这个应该不用关注,原因是都是可以达到同步的目的的。假如你有兴趣可以去了解下windows下mutex和critical的一些区别,例如哪个能跨进程,哪个不能,哪个效率高等等
2.这种应该不会限制你只在std::thread创建的线程使用。只是你说你用pthread_create创建线程,然后用std::mutex,似乎没必要。标准库就是为了屏蔽各个平台的差异才有的。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C++11中std::mutex问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)