以下のプログラムでは、ランダムなインスタンスでセグメンテーション違反 (コア ダンプ)エラーが発生します。エラーなしで実行される場合もあります。このプログラムは、デッドロックを理解するためのものです。
このプログラムを約 15 回実行しましたが、これまでデッドロックに直面したことはありません。プログラムがスムーズに実行される場合もあれば (これは予想されることです)、セグメンテーション違反が発生する場合もあります (これは予想外です)。セグメンテーション違反が発生するのはなぜですか?
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
int a=5;
int b=3;
pthread_mutex_t mutex1,mutex2;
void* add_subtract(){
pthread_mutex_lock(&mutex1);
pthread_mutex_lock(&mutex2);
a=a+2;
b=b-2;
printf("%d %d\n",a,b);
pthread_mutex_unlock(&mutex2);
pthread_mutex_unlock(&mutex1);
}
void* subtract_add(){
pthread_mutex_lock(&mutex2);
pthread_mutex_lock(&mutex1);
b=b-2;
a=a+2;
printf("%d %d\n",a,b);
pthread_mutex_unlock(&mutex1);
pthread_mutex_unlock(&mutex2);
}
int main(){
pthread_t thread1,thread2;
pthread_create(&thread1,NULL,add_subtract(),NULL);
pthread_create(&thread2,NULL,subtract_add(),NULL);
pthread_join(thread1,NULL);
pthread_join(thread2,NULL);
return 0;
}