寻找使用互斥锁线程的示例

我正在专门学习pthreadsmutex variables。我正在看一个示例代码,您可以找到here。它使用线程来计算点积。该代码的中心部分是点积函数:

 void *dotprod(void *arg)
 {


    int i,start,end,len ;
    long offset;
    double mysum,*x,*y;
    offset = (long)arg;
     
    len = dotstr.veclen;
    start = offset*len;
    end   = start + len;
    x = dotstr.a;
    y = dotstr.b;


    mysum = 0;
    for (i=start; i<end ; i++) 
     {
       mysum += (x[i] * y[i]);
     }

    /*
    Lock a mutex prior to updating the value in the shared
    structure,and unlock it upon updating.
    */
    pthread_mutex_lock (&mutexsum);
    dotstr.sum += mysum;
    pthread_mutex_unlock (&mutexsum);

    pthread_exit((void*) 0);
 }

第一个问题是,是否确实需要在此处锁定线程。我尝试删除锁定和解锁呼叫,但最终结果是相同的。但是,这只是一个示例,因此在实践中也许不需要锁。这带给我第二个问题:我想我会尝试将代码更改为某些输出可能会更改的代码,具体取决于是否有多个线程正在访问dotstr.sum。我再次摆脱了锁并尝试:

dotstr.sum += mysum;
dotstr.sum *= 1.1;

但与我的预期相反,这没有引入比赛条件。在几次试验中,输出完全相同。为什么会这样呢?最后,有人可以建议对代码进行简单的修改,以防需要锁定吗?

tfdghdfsersffy 回答:寻找使用互斥锁线程的示例

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/1467043.html

大家都在问