c++ - 信号量(Mutex)的麻烦

标签 c++ multithreading mutex semaphore

假设我有一个 Mutex、两个线程、一个函数和一个循环(伪代码)。 功能:

void Update(){
    Mutex.enter();
    ...// time: 10 ms
    Mutex.leave();
}

主要.cpp:

void main(){
    ...// Starting thread
    while(true)
        Update();
}

主题:

void Thread(void *){
    Mutex.enter();
    ... // 
    Mutex.leave();
}

但是Function不断的调用,所以Mutex小的时候是空闲的。 Thread 进入 Mutex 的几率有多大?如果低,如何解决?

最佳答案

如果您使用的是增强线程 ( link ),那么我会使用 yield() .它将允许任何其他“等待”线程“有机会”运行。

可能还有一种 win32 或 pthreads 方法可以做到这一点。

编辑:顺便说一下,在锁的 yield() 之外使用。如果它在锁内,显然那将是无用的。

Edit2:下面是针对不同平台的函数:

  • Win32:SwitchToThread() msdn link .
  • Linux/Unix pthreads:`pthread_yield()' link

如果您不在这些平台中的任何一个上,请阅读这些链接中的说明,并在您的框架中查找可以执行相同操作的函数。

关于c++ - 信号量(Mutex)的麻烦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10399714/

相关文章:

c++ - 是否可以为同时使用 Windows 和 Linux 的客户端使用相同的 DLL

c++ - 在C++中获取数字的所有组合

c++ - 在 placement new 中输入信息

c++ - 如何使用 Qt/C++ 在 Windows 上将 GUI 转换为路径?

c++ - 为什么基于锁的程序不能组成正确的线程安全片段?

c++ - 为什么并行执行 Tcl_ExprDouble 的独立 Tcl 解释器需要互斥体?

python - Apache Spark 读取 S3 : can't pickle thread. 锁对象

python - 在 Python/Django 中将多个 POST 请求作为多线程提交

java - 从线程返回值

multithreading - 如何安全地将新的键值对添加到原生 map 中