【问题标题】:Is it better to have a conditional variable and a mutex or just a mutex in a 2 thread situation在 2 线程的情况下是有条件变量和互斥体还是只有互斥体更好
【发布时间】:2013-08-05 16:49:48
【问题描述】:

线程阻塞比等待更好吗?有区别吗?

场景 1 只是让线程 2 占用全局变量 k,直到它完成。场景 2 呈现了更多具有 2 个以上线程的真实世界多线程场景。

场景一:

global_var k = 1;

Thread1() 
{
    //preliminary work

    while (!done) 
    {
    mutex_lock(handshake_k);
    if (100 == k)
        done = true;

    mutex_unlock(handshake_k);
    }

   //continue executing
}


Thread2() {
    //preliminary work
    mutex_lock(handshake_k);
    for (i=0; i <= 100; i++)
        ++k; ;
    mutex_unlock(handshake_k);
}

场景二:

global_var k = 1;

Thread1()
{
    //preliminary work
    while (!done)
    {
        mutex_lock(handshake_k);
        if (k < 100)
        {
            wait_cv(handshake_monitor_k);   //unlocks handshake_k
            //mutex exclusively locked here
        }

        else
            done = true;

        mutex_unlock(handshake_k);
    }
    //continue executing
}

Thread2()
{
    //preliminary work

    for (i=0; i <= 100; i++)
    {
        mutex_lock(handshake_k);
        ++k; 
        mutex_unlock(handshake_k);
    }

}

【问题讨论】:

    标签: multithreading posix mutex


    【解决方案1】:

    在这种情况下,这并不重要,因为将k计数到100只需要这么短的时间。

    但是,如果您正在做一些需要一些时间的事情,那么第二个会更合适,除非您确定 k 必须达到 100 才能发生任何事情。

    在现实生活中,您不太可能知道等待线程在等待时会做什么。在这种情况下,无需占用第二个线程中的所有 CPU 时间。不时释放一些东西,因此 CPU 共享的粒度更小。这在线程 1 绑定到某种 GUI 事件处理的情况下也很有用。

    【讨论】:

    • 谢谢李!我同意方案 1 似乎不切实际
    猜你喜欢
    • 2011-01-06
    • 2016-12-27
    • 2021-06-06
    • 1970-01-01
    • 2013-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多