gpt4 book ai didi

c - 在线程中使用不同的互斥锁

转载 作者:行者123 更新时间:2023-12-03 12:45:39 24 4
gpt4 key购买 nike

我编写了以下程序来实现 POSIX 中的两个线程。有一个全局共享变量sum,它被两个不同的线程同时访问。在访问共享变量时,我在每个线程内使用了互斥锁和解锁。我有个问题。在这里,我在两个线程中使用了相同的互斥锁 (pthread_mutex_lock(&mutex))。如果我在 thread1pthread_mutex_lock(&mutex1) 中使用两个不同的互斥锁和解锁线程(例如 pthread_mutex_lock(&mutex))会发生什么> 在 thread2 中。我已经注释掉了代码中的困惑行。

我的示例代码片段:

#include<stdio.h>
#include<pthread.h>
#include<stdlib.h>
pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_t mutex1=PTHREAD_MUTEX_INITIALIZER;
int sum=0;
void * threadFunc1(void * arg)
{
int i;
for(i=1;i<100;i++)
{
printf("%s\n",(char*)arg);
pthread_mutex_lock(&mutex)
sum++;
pthread_mutex_unlock(&mutex)
sleep(1);
}
}

void * threadFunc2(void * arg)
{
int i;
for(i=1;i<100;i++)
{
printf("%s\n",(char*)arg);
pthread_mutex_lock(&mutex) //what will happen if I use mutex1 here
sum--;
pthread_mutex_lock(&mutex) //what will happen if I use mutex1 here
sleep(1);
}
}


int main(void)
{
pthread_t thread1;
pthread_t thread2;


char * message1 = "i am thread 1";
char * message2 = "i am thread 2";

pthread_create(&thread1,NULL,threadFunc1,(void*)message1 );
pthread_create(&thread2,NULL,threadFunc2,(void*)message2 );

pthread_join(thread1,NULL);
pthread_join(thread2,NULL);

return 0;

在访问共享变量时使用相同互斥锁和使用不同互斥锁的基本区别是什么?

最佳答案

互斥量的目的是防止一个线程访问共享变量而另一个线程正在或可能正在修改它。互斥量的语义是两个线程不能同时锁定同一个互斥量。如果您使用两个不同的互斥锁,您不会阻止一个线程访问共享变量而另一个线程正在修改它,因为线程可以同时持有不同的互斥锁。因此代码将不再保证有效。

关于c - 在线程中使用不同的互斥锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33199389/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com