我很担心互斥体会对代码段或代码段中的变量起作用。
在下面的示例中,互斥锁将阻止两个线程同时从func1或func2尝试访问mysum,或者只保护互斥锁和解锁之间的代码段受保护
.
.
pthread_mutex_t myMutex;
int mysum;
void func1(){
.
.
.
pthread_mutex_lock (&myMutex);
mysum--;
printf("Thread %ld did mysum=%d\n",id,mysum);
pthread_mutex_unlock (&myMutex);
.
.
}
void func2(){
.
.
.
mysum++;
pthread_mutex_lock (&myMutex);
mysum++;
printf("Thread %ld did mysum=%d\n",id,mysum);
pthread_mutex_unlock (&myMutex);
.
.
}
int main (int argc, char *argv[])
{
pthread_mutex_init(&myMutex, NULL);
.
.
pthread_create(&callThd1, &attr, func1, NULL);
pthread_create(&callThd2, &attr, func2, NULL);
pthread_create(&callThd3, &attr, func1, NULL);
pthread_create(&callThd4, &attr, func2, NULL);
pthread_create(&callThd5, &attr, func1, NULL);
pthread_create(&callThd6, &attr, func2, NULL);
.
.
pthread_mutex_destroy(&myMutex);
.
.
}
答案 0 :(得分:0)
互斥锁仅在pthread_mutex_lock()
和pthread_mutex_unlock()
之间的代码部分之间提供互斥(这些部分称为关键部分)。
互斥锁与其保护的共享数据之间没有直接链接 - 您可以确保只在锁定了相应的互斥锁的情况下访问共享数据。