互斥锁mutex的使用
Posted dayang12525
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了互斥锁mutex的使用相关的知识,希望对你有一定的参考价值。
using (var mutex = new Mutex(false, "name")) { try { mutex.WaitOne(); //do something } catch(Exception ex) { throw ex; } finally { mutex.ReleaseMutex(); } }
1、initiallyOwned表示创建mutex的线程是否拥有该互斥体。true表示创建线程拥有互斥锁,只有在创建线程中调用ReleaseMutex释放后,其他等待线程才能参与抢夺互斥体的活动。false表示互斥锁体于与空闲状态,其他等待互斥锁的线程立即参与到抢夺互斥锁的活动中去。
2、在上面程序中如果创建mutex时使用true参数,故在启动其他线程后必须执行mutex.ReleaseMutex(),如果不释放mutex,则其他线程将一直等待下去。使用ture,相当于一创建就使用waitone()
3、mutex.WaitOne()与mutex.ReleaseMutex()要像 { } 一样配对使用,否则将出现 "由于出现被放弃的 mutex,等待过程结束" 的异常
4、mutex与monitor相比,没有暂时释放的功能;因此mutex一经释放,原释放资源的线程也将重新参与新一轮对mutex的争夺过程。
以上是关于互斥锁mutex的使用的主要内容,如果未能解决你的问题,请参考以下文章
45. sync.Mutex 互斥和互斥锁 | 厚土Go学习笔记
CUDA主机代码的互斥锁? boost::mutex 由于使用 nvcc 重新定义了 BOOST_COMPILER 没有解决方案