C和pthreads:如何将互斥量引用到特定变量?

时间:2015-08-19 13:20:11

标签: c locking pthreads global-variables mutex

this代码中,显示了使用互斥锁的示例。特别是,互斥锁首先在main

之前声明
pthread_mutex_t mutexsum;

要受保护的特定变量"通过互斥体在全局结构dotstr.sum中是dotstr:每个线程在获得lock之后写入它。对应的代码是:

pthread_mutex_lock (&mutexsum);
dotstr.sum += mysum;
printf("Thread %ld did %d to %d:  mysum=%f global sum=%f\n",offset,start,end,mysum,dotstr.sum);
pthread_mutex_unlock (&mutexsum);

我已经编译了代码,它显然有效,但我不太了解互斥。那么,程序怎么能意识到" general"互斥mutexsum仅适用于dotstr.sum变量?

还有许多其他可以锁定的全局变量。为什么互斥体mutexsum和我要锁定的变量dotstr.sum之间的代码中没有明确的关系?

1 个答案:

答案 0 :(得分:3)

(pthread)互斥锁未明确绑定到特定变量,它只是一种通用锁定机制。由您来确保该变量的每个操作都被锁定和解锁正确包围。

您的程序有一个(n隐式)合约,只有1个线程可以访问dotstr.sum。互斥体通过确保只有一个线程可以锁定互斥锁来帮助您强制执行它,但每次使用dotstr.sum执行某些操作时,它都不会强制您锁定和解锁它。

尝试,例如,评论锁和&解锁线。该程序仍将编译并运行,但结果可能不是您想要的结果。

您可以将互斥锁与任何内容相关联,例如从文件读取或写入。但是必须确保对你要锁定的东西的每次访问都被锁定。