當我complie這個代碼,我可以得到這樣 enter image description here關於種族condtiion
代碼的結果是這樣的
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <string.h>
#include <sched.h>
void *thread_entry(void *ptr)
{
int i, j, len;
char *str = (char *) ptr;
len = strlen(str);
for (i = 0; i < 10; i++)
{
for (j = 0; j < len; j++) {
putchar(str[j]);
sched_yield(); /*to yield CPU*/
}
putchar('\n');
}
}
int main()
{
pthread_t thread1, thread2;
const char *msg1 = "Hello This is Thread 1.";
const char *msg2 = "I am Thread 2.";
pthread_create(&thread1, NULL, thread_entry, (void *) msg1);
pthread_create(&thread2, NULL, thread_entry, (void *) msg2);
pthread_join(thread1, NULL);
pthread_join(thread2, NULL);
return 0;
}
也就是說代碼。我認爲是因爲Common Resource,但我不確定。請教我爲什麼結果是這樣的。我真的很欣賞它!
你說過了。這裏有種族情況。你應該在臨界區使用'pthread_mutex_lock()'和'pthread_mutex_unlock()'。 –
@John是否謝謝你這麼說! –
此代碼是專門設計用於強調多個線程使用輸出流。這顯然是一項學術活動。請向您的教授/導師瞭解其他方向。 – ThingyWotsit