当我编译这段代码时,我可以得到这样的结果 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;
}
那是代码。我认为,由于共同资源,但我不确定。请教我为什么结果是这样的。我真的很感激它!
答案 0 :(得分:0)
绝对是您的想法。 输出是共享资源,两个线程同时尝试将字符推送到它。 事实上,你已经投入了一个收益率,这将鼓励(但不能控制)进出线程。
你没有做任何事来控制两个线程的交错,你不可避免地得到屏幕截图中显示的乱码输出。
在不知道你想要做什么的情况下,没有什么可说的。