【发布时间】:2015-11-02 21:59:11
【问题描述】:
我有 2 个线程:将“重新打印”用户输入语句的元音和辅音。元音线程将打印以元音开头的单词,辅音线程将打印以辅音开头的单词...我正在尝试使用 sched_yield() 以与用户输入相同的顺序输出... 因此,如果用户输入是:大家好,辅音线程将打印 hi 和元音将打印所有,按那个顺序.. 但我似乎遗漏了一些东西,因为我没有得到相同的顺序.. 你能帮忙吗...
void *vowels( void *s )
{
for(int i = 1; i < noOfTokens; i++){
string str = tokens[i];
size_t found = str.find_first_of(vowelList);
if(found == 0){
printf("vows %s\n", tokens[i]);
}
else {
sched_yield();
}
}
pthread_exit(0);
}
/* the cons thread should print all words starting with a consonant. */
void *consonants( void *s )
{
for(int j = 1; j < noOfTokens; j++){
string str = tokens[j];
size_t found = str.find_first_of(vowelList);
if(found != 0){
printf("cons %s\n", tokens[j]);
}
else {
sched_yield();
}
}
pthread_exit(0);
}
【问题讨论】:
-
如果没有一些线程间通信,这将永远无法工作。
yield是给调度程序的一条消息,基本上是说“我现在不需要更多时间来运行,继续给你喜欢的任何线程时间,包括我”。研究使用信号量或互斥体。 -
除非准备运行的线程比你拥有的内核多,否则你的线程将无法让步,所以
sched_yield不会做任何事情。
标签: c++ scheduling