我對多執行緒編程很陌生。我想用 3 個不同的執行緒撰寫代碼,每個執行緒列印一些不同的字符。執行緒的執行應該基于回圈演算法。假設我們有 t1, t2, t3 執行緒,它們的執行順序應該是 t1, t2, t3, t1, t2, t3,...
為此,我撰寫了以下代碼:
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <sched.h>
void* a(void* ptr) {
for (int i=0; i< 10; i ){
printf("1");
printf("2");
printf("3");
printf("4");
}
return NULL;
}
void* b(void* ptr) {
for (int i=0; i< 10; i ){
printf("a");
printf("b");
printf("c");
printf("d");
}
return NULL;
}
void* c(void* ptr) {
for (int i=0; i< 10; i ){
printf("5");
printf("6");
printf("7");
printf("8");
}
return NULL;
}
int main() {
pthread_attr_t attr1, attr2, attr3;
pthread_attr_init(&attr1);
pthread_attr_init(&attr2);
pthread_attr_init(&attr3);
pthread_t t1, t2, t3;
pthread_attr_setschedpolicy(&attr1, SCHED_RR);
pthread_create(&t1, &attr1, a, NULL);
pthread_attr_setschedpolicy(&attr2, SCHED_RR);
pthread_create(&t2, &attr2, b, NULL);
pthread_attr_setschedpolicy(&attr3, SCHED_RR);
pthread_create(&t3, &attr3, c, NULL);
pthread_join(t1, NULL);
pthread_join(t2, NULL);
pthread_join(t3, NULL);
pthread_exit(0);
return 0;
}
輸出是:
首先:輸出不可重現,每次運行二進制檔案時,我都會得到不同的輸出。
12341234123412341234156785678567856785678567856785678567856782341234123412341234abcdabcdabcdabcdabcdabcdabcdabcdabcdabcd.
我想要的輸出是這樣的:
123abc567...
每個人都知道我的代碼有什么問題嗎?
謝謝
uj5u.com熱心網友回復:
如何確保我的執行緒在回圈調度策略中執行?
你快到了。您可以通過呼叫來確保它,
不幸的是,Posix 執行緒庫 (pthreads) 沒有提供任何易于使用的信號量,而Unix 信號量也不是很容易使用。
IMO,你應該做一點研究,如果你遇到任何你不明白的事情,然后回來問一個新問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/409611.html
標籤:
