关于种族问题

时间:2017-04-04 07:25:21

标签: ubuntu operating-system mutual-exclusion

当我编译这段代码时,我可以得到这样的结果 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;
 }

那是代码。我认为,由于共同资源,但我不确定。请教我为什么结果是这样的。我真的很感激它!

1 个答案:

答案 0 :(得分:0)

绝对是您的想法。 输出是共享资源,两个线程同时尝试将字符推送到它。 事实上,你已经投入了一个收益率,这将鼓励(但不能控制)进出线程。

你没有做任何事来控制两个线程的交错,你不可避免地得到屏幕截图中显示的乱码输出。

在不知道你想要做什么的情况下,没有什么可说的。