2024年2月26日发(作者:)

pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER;

pthread_mutex_t mutex2 = PTHREAD_MUTEX_INITIALIZER;

pthread_mutex_t mutex3 = PTHREAD_MUTEX_INITIALIZER;

pthread_mutex_t mutex4 = PTHREAD_MUTEX_INITIALIZER;

static int sequence1 = 0;

static int sequence2 = 0;

int func1()

{

pthread_mutex_lock(&mutex1);

++sequence1;

sleep(1);

pthread_mutex_lock(&mutex2);

++sequence2;

pthread_mutex_unlock(&mutex2);

pthread_mutex_unlock(&mutex1);

return sequence1;

}

int func2()

{

pthread_mutex_lock(&mutex2);

++sequence2;

sleep(1);

pthread_mutex_lock(&mutex1);

++sequence1;

pthread_mutex_unlock(&mutex1);

pthread_mutex_unlock(&mutex2);

return sequence2;

}

void* thread1(void* arg)

{

while (1)

{

int iRetValue = func1();

if (iRetValue == 100000)

{

pthread_exit(NULL);

}

}

}

void* thread2(void* arg)

{

while (1)

{

int iRetValue = func2();

if (iRetValue == 100000)

{

pthread_exit(NULL);

}

}

}

void* thread3(void* arg)

{

while (1)

{