Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ubuntu 关于线程、睡眠和阻塞_Ubuntu_Operating System - Fatal编程技术网

Ubuntu 关于线程、睡眠和阻塞

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

当你编译这个Thread.c时,我想知道为什么会出现这个序列

我想是因为睡眠。它会阻塞,但我不能正确地理解。。。如果我一遍又一遍地编译它

顺序会改变吗??我只能得到AAA BBB CCC plz帮助我

代码是

#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我很抱歉我不知道这一点。我刚刚读过如何提出好问题。我会重写这个。很抱歉打扰你