关于竞争条件

About race condtiion

当我编译这段代码时,我可以得到这样的结果 enter image description here

代码是这样的

#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;
 }

这就是代码。我认为是因为公共资源,但我不确定。请教我为什么结果是这样的。我真的很感激!

绝对如你所想。 输出是共享资源,两个线程同时尝试将字符推送到它。 事实上,您已经将 yield 放入其中,这将鼓励(但不是控制)进出线程。

您没有采取任何措施来控制两个线程的交错,您不可避免地会得到屏幕截图中显示的乱码输出。

不知道你想做什么就没什么好说的了。