gpt4 book ai didi

c - 如何在 MacO 上生成线程死锁?

转载 作者:太空宇宙 更新时间:2023-11-04 04:11:48 24 4
gpt4 key购买 nike

我正在学习处理线程死锁,但通过在我的终端上执行 C 代码,执行不会产生死锁,即使它应该产生死锁。谁能告诉我为什么以及如何强制进入僵局?

#include<pthread.h>
#include<semaphore.h>
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>

void *func(void *p);

pthread_mutex_t m1,m2;

int main(){

pthread_t tid[2];
pthread_attr_t attr;
pthread_attr_init(&attr);

int id[2];

for(int i=0;i<2;i++){
id[i]=i;
pthread_create(&tid[i],&attr,func,(&id[i]));
}

pause();

}

void *func(void *p){

int *i=p;
while(1){
if(*i==0){
pthread_mutex_lock(&m1);
pthread_mutex_lock(&m2);
printf("I'm Thread %d\n", *i);
pthread_mutex_unlock(&m1);
pthread_mutex_unlock(&m2);
}
else{
pthread_mutex_lock(&m2);
pthread_mutex_lock(&m1);
printf("I'm Thread %d\n", *i);
pthread_mutex_unlock(&m1);
pthread_mutex_unlock(&m2);
}
}
pthread_exit(0);

}

最佳答案

更改线程中变量的赋值: int *i=(int *)p;

您需要指向参数,否则两个线程运行相同的锁定解锁序列。在调用 pthread_create 的地方有一个隐式转换。

关于c - 如何在 MacO 上生成线程死锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56450702/

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