C++11中std::mutex问题

kepand18 2016-08-24 10:39:28
1、对于WINDOWS,该函数底层是否调用CreateMutex,还是使用临界区 2、是否只有std::thread的线程可以使用其达到互斥,还是其他方式创建的线程也可以使用
...全文
549 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
yu_sn0w 2020-02-26
  • 打赏
  • 举报
回复
有个重要问题是,windows 的 DLLMain 里面卸载的时候如果使用了,或者间接使用了std::mutex会导致出错! 同样 DllMain 里面在加载的时候用了std::thread 也是死锁
引用 8 楼 pengzhixi 的回复:
1.标准库的实现对于windows平台使用mutex还是critical这个应该不用关注,因为都是可以达到同步的目的的。如果你有兴趣可以去了解下windows下mutex和critical的一些区别,比如哪个能跨进程,哪个不能,哪个效率高等等 2.这种应该不会限制你只在std::thread创建的线程使用。只是你说你用pthread_create创建线程,然后用std::mutex,似乎没必要。标准库就是为了屏蔽各个平台的差异才有的。
pengzhixi 2016-08-25
  • 打赏
  • 举报
回复
1.标准库的实现对于windows平台使用mutex还是critical这个应该不用关注,因为都是可以达到同步的目的的。如果你有兴趣可以去了解下windows下mutex和critical的一些区别,比如哪个能跨进程,哪个不能,哪个效率高等等 2.这种应该不会限制你只在std::thread创建的线程使用。只是你说你用pthread_create创建线程,然后用std::mutex,似乎没必要。标准库就是为了屏蔽各个平台的差异才有的。
sdghchj 2016-08-25
  • 打赏
  • 举报
回复
既然是标准库,就是各平台都展示给你相同的类库和接口,你只管用它就行了,它内部的调用才是与平台相关的。如果WIN提供了你源码,你翻开源码看就得了;如果没提供源码,那么它内部是用互斥锁还是临界区甚至事件来实现,这个重要吗?它代表的就你只管用std::mutex提供的方法即可。实现想知道可以去翻boost的实现源码,boost貌似是用event事件实现的mutex。 std::thread也是如此,管它内部是_beginthread还是CreateThread,都是封装来的。 std::mutex可以用于线程同步,不管是什么方式创建的线程。
赵4老师 2016-08-24
  • 打赏
  • 举报
回复
《Windows核心编程》
paschen 版主 2016-08-24
  • 打赏
  • 举报
回复
1、没有调用,应该是参照Linux方式实现的 2、其他方式的也可
kepand18 2016-08-24
  • 打赏
  • 举报
回复
引用 4 楼 jiqiang01234 的回复:
请保持库使用的一致性,如果只用系统原生线程,那就保持使用;如果使用c++11标准库线程,不要混杂其他。
如果混了是否未定义
kepand18 2016-08-24
  • 打赏
  • 举报
回复
引用 2 楼 zhao4zhong1 的回复:
《Windows核心编程》
这是C++标准库东西,这本书不用看也知不会讲
jiqiang01234 2016-08-24
  • 打赏
  • 举报
回复
请保持库使用的一致性,如果只用系统原生线程,那就保持使用;如果使用c++11标准库线程,不要混杂其他。
hzhxxx 2016-08-24
  • 打赏
  • 举报
回复
这个是C++ 11 标准库的,不需要系统函数支持。 支持所有线程

64,676

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧