多线程调用相同的函数

时间:2014-02-18 18:09:53

标签: c++ multithreading semaphore

我想出了这个被要求用C ++编写代码的问题。所以,我需要使用C ++同步原语。

问:创建一个接受整数作为参数并在控制台上打印的方法(例如foo)。多个线程可以访问此方法。如果两个或多个线程使用相同的值调用该方法,则只允许一个线程打印其他线程应等待的值。如果值不同,则所有线程都应允许打印该值。

我的建议是使用全局哈希表,例如unordered_map(i,信号量)地图。因此,当调用foo(i)时,foo会检查哈希表。如果我不在哈希表中,我们添加map [i] =信号量(0)。当我打印时,调用map [i] .release()以允许其他等待线程输入i继续其打印操作。另一方面,如果我已经在哈希中,则意味着具有相同输入的其他线程正在运行,因此它应该通过map [i] .aquire()等待。

希望您能帮助我找到更好的解决方案或此提案的更正版本。

1 个答案:

答案 0 :(得分:0)

示例使用Windows函数和静态全局互斥锁。

static HANDLE hMutex;    // initialized elsewhere
// ...

void DisplayInt(int value)
{
    WaitForSingleObject(hMutex);
    // ... check value and display message
    ReleaseMutex(hMutex);
}