Ubuntu 关于线程、睡眠和阻塞
当你编译这个Thread.c时,我想知道为什么会出现这个序列 我想是因为睡眠。它会阻塞,但我不能正确地理解。。。如果我一遍又一遍地编译它 顺序会改变吗??我只能得到AAA BBB CCC plz帮助我 代码是Ubuntu 关于线程、睡眠和阻塞,ubuntu,operating-system,Ubuntu,Operating System,当你编译这个Thread.c时,我想知道为什么会出现这个序列 我想是因为睡眠。它会阻塞,但我不能正确地理解。。。如果我一遍又一遍地编译它 顺序会改变吗??我只能得到AAA BBB CCC plz帮助我 代码是 #include <stdio.h> #include <pthread.h> #include <sched.h> #include <unistd.h> void *thread_entry(void *ptr) { char
#include <stdio.h>
#include <pthread.h>
#include <sched.h>
#include <unistd.h>
void *thread_entry(void *ptr)
{
char *name = (char *)ptr;
printf("%s-A\n", name);
sleep(1); //sched_yield();
printf("%s-B\n", name);
sleep(1); //sched_yield();
printf("%s-C\n", name);
}
int main()
{
#define MAX_THREAD 3
pthread_t thread[MAX_THREAD];
char *thread_name[MAX_THREAD] = {"thread1", "thread2", "thread3"};
int i;
for (i = 0; i < MAX_THREAD; i++)
pthread_create(&thread[i], NULL, thread_entry, thread_name[i]);
for (i = 0; i < MAX_THREAD; i++)
pthread_join(thread[i], NULL);
return 0;
#包括
#包括
#包括
#包括
无效*线程输入(无效*ptr)
{
字符*名称=(字符*)ptr;
printf(“%s-A\n”,名称);
sleep(1);//sched_yield();
printf(“%s-B\n”,名称);
sleep(1);//sched_yield();
printf(“%s-C\n”,名称);
}
int main()
{
#定义最大线程3
pthread_t thread[最大线程];
char*thread_name[MAX_thread]={“thread1”、“thread2”、“thread3”};
int i;
对于(i=0;i
}清楚地说明你想在大局中实现什么,代码是用来做什么的,你想让它返回什么,以及它的实际功能。@Aziuth我想知道为什么序列是AAA BBB CCC。。。。。。。很抱歉,你能详细解释一下吗?好的,解释一下:堆栈溢出不是一些便宜的聊天或论坛。如果你问一个问题,你的工作就是详细阐述,尽可能精确。你应该从阅读开始。例如,有一件事,你应该尽可能地开始写正确的英语。语言障碍是可以的,写“plz”而不是“请”是懒惰的。你的问题应该是这样的:“为了实现这一点,我做到了。我希望下面的代码返回下面的输出,但它却这样那样做了。”你从“当你编译这个线程时,我想知道为什么会出现这个序列”开始。这是懒惰的语言。无论你在哪里学英语,你都知道句子是以大写开头的。但真正的问题是第二部分。“这个序列”-哪一个?没有顺序。我可以编译并运行你的代码,但那不是我的工作。你的工作就是写“如果你编译并运行这段代码,它会产生…”。看看其他问题,编辑你的问题。遵循标准的堆栈溢出准则:表现得像在工作中与忙碌的同事交谈一样。@Aziuth我很抱歉我不知道这一点。我刚刚读过如何提出好问题。我会重写这个。很抱歉打扰您,请明确说明您希望在全局中实现什么,代码的用途是什么,您希望它返回什么,以及它的实际功能。@Aziuth我想知道为什么序列是AAA BBB CCC。。。。。。。很抱歉,你能详细解释一下吗?好的,解释一下:堆栈溢出不是一些便宜的聊天或论坛。如果你问一个问题,你的工作就是详细阐述,尽可能精确。你应该从阅读开始。例如,有一件事,你应该尽可能地开始写正确的英语。语言障碍是可以的,写“plz”而不是“请”是懒惰的。你的问题应该是这样的:“为了实现这一点,我做到了。我希望下面的代码返回下面的输出,但它却这样那样做了。”你从“当你编译这个线程时,我想知道为什么会出现这个序列”开始。这是懒惰的语言。无论你在哪里学英语,你都知道句子是以大写开头的。但真正的问题是第二部分。“这个序列”-哪一个?没有顺序。我可以编译并运行你的代码,但那不是我的工作。你的工作就是写“如果你编译并运行这段代码,它会产生…”。看看其他问题,编辑你的问题。遵循标准的堆栈溢出准则:表现得像在工作中与忙碌的同事交谈一样。@Aziuth我很抱歉我不知道这一点。我刚刚读过如何提出好问题。我会重写这个。很抱歉打扰你