关于竞争条件
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 放入其中,这将鼓励(但不是控制)进出线程。
您没有采取任何措施来控制两个线程的交错,您不可避免地会得到屏幕截图中显示的乱码输出。
不知道你想做什么就没什么好说的了。
当我编译这段代码时,我可以得到这样的结果 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 放入其中,这将鼓励(但不是控制)进出线程。
您没有采取任何措施来控制两个线程的交错,您不可避免地会得到屏幕截图中显示的乱码输出。
不知道你想做什么就没什么好说的了。