我有2個線程:將重新打印用戶輸入語句的元音和輔音。元音線程將打印以元音開頭的單詞,輔音線程將打印以輔音開頭的單詞...我試圖用sched_yield()以與用戶輸入相同的順序輸出... 因此,如果用戶輸入是:大家好,輔音線程將打印嗨和元音將打印所有,按順序..但它似乎我缺少的東西,因爲我沒有得到相同的順序..你能幫助...使用sched_yield來控制線程執行
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'是調度員的一個信息,基本上說:「我現在不需要更多的時間來運行,請繼續,給我喜歡的任何線程,包括我」。看看使用信號量或互斥量。 – Kenney
除非有更多可直接運行的線程比內核多,否則你的線程沒有任何優勢,所以'sched_yield'不會做任何事情。 –