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

C and pthreads: how can a mutex be referred to a particular variable?

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

之前声明
pthread_mutex_t mutexsum;

互斥锁"protected"的特定变量是全局结构dotstr中的dotstr.sum:每个线程在获得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?

之间的代码没有明确的关系

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

您的程序有一个(隐含的)合同,只有 1 个线程可以访问 dotstr.sum。互斥锁通过确保只有 1 个线程可以锁定互斥锁来帮助您强制执行它,但它不会在您每次使用 dotstr.sum.

执行某些操作时强制您锁定和解锁它。

例如,尝试注释掉锁定和解锁行。该程序仍会编译 运行,但结果可能不是您想要的。

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