Linux :多處理器遇到實(shí)時(shí)進(jìn)程和普通進(jìn)程的程序設(shè)計(jì)
get_thread_info(thread_index);
long num = 0;
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 5000000; j++)
{
// 沒(méi)什么意義,純粹是模擬 CPU 密集計(jì)算。
float f1 = ((i+1) * 345.45) * 12.3 * 45.6 / 78.9 / ((j+1) * 4567.89);
float f2 = (i+1) * 12.3 * 45.6 / 78.9 * (j+1);
float f3 = f1 / f2;
}
// 打印計(jì)數(shù)信息,為了能看到某個(gè)線程正在執(zhí)行
printf("thread_index %d: num = %ld ", thread_index, num++);
}
// 線程執(zhí)行結(jié)束
printf("thread_index %d: exit ", thread_index);
return 0;
}
void main(void)
{
// 一共創(chuàng)建四個(gè)線程:0和1-實(shí)時(shí)線程,2和3-普通線程(非實(shí)時(shí))
int thread_num = 4;
// 分配的線程索引號(hào),會(huì)傳遞給線程參數(shù)
int index[4] = {1, 2, 3, 4};
// 用來(lái)保存 4 個(gè)線程的 id 號(hào)
pthread_t ppid[4];
// 用來(lái)設(shè)置 2 個(gè)實(shí)時(shí)線程的屬性:調(diào)度策略和優(yōu)先級(jí)
pthread_attr_t attr[2];
struct sched_param param[2];
// 實(shí)時(shí)線程,必須由 root 用戶才能創(chuàng)建
if (0 != getuid())
{
printf("Please run as root ");
exit(0);
}
// 創(chuàng)建 4 個(gè)線程
for (int i = 0; i < thread_num; i++)
{
if (i <= 1) // 前2個(gè)創(chuàng)建實(shí)時(shí)線程
{
// 初始化線程屬性
pthread_attr_init(&attr[i]);
// 設(shè)置調(diào)度策略為:SCHED_FIFO
pthread_attr_setschedpolicy(&attr[i], SCHED_FIFO);
// 設(shè)置優(yōu)先級(jí)為 51,52。
param[i].__sched_priority = 51 + i;
pthread_attr_setschedparam(&attr[i], &param[i]);
// 設(shè)置線程屬性:不要繼承 main 線程的調(diào)度策略和優(yōu)先級(jí)。
pthread_attr_setinheritsched(&attr[i], PTHREAD_EXPLICIT_SCHED);
// 創(chuàng)建線程
pthread_create(&ppid[i], &attr[i],(void *)thread_routine, (void *)&index[i]);
}
else // 后兩個(gè)創(chuàng)建普通線程
{
pthread_create(&ppid[i], 0, (void *)thread_routine, (void *)&index[i]);
}
}
// 等待 4 個(gè)線程執(zhí)行結(jié)束
for (int i = 0; i < 4; i++)
pthread_join(ppid[i], 0);
for (int i = 0; i < 2; i++)
pthread_attr_destroy(&attr[i]);
}
編譯成可執(zhí)行程序的指令:
gcc -o test test.c -lpthread
腦殘測(cè)試開(kāi)始
首先說(shuō)一下預(yù)期結(jié)果,如果沒(méi)有預(yù)期結(jié)果,那其他任何問(wèn)題都?jí)焊挥谜劻恕?/p>
一共有 4 個(gè)線程:
線程索引號(hào) 1和2:是實(shí)時(shí)線程(調(diào)度策略是 SCHED_FIFO,優(yōu)先級(jí)是 51,52);
線程索引號(hào) 3和4:是普通線程(調(diào)度策略是 SCHED_OTHER, 優(yōu)先級(jí)是 0);
我的測(cè)試環(huán)境是:Ubuntu16.04,是一臺(tái)安裝在 Windows10 上面的虛擬機(jī)。
我期望的結(jié)果是:
首先打印 1 號(hào)和 2 號(hào)這兩個(gè)線程的信息,因?yàn)樗鼈z是實(shí)時(shí)任務(wù),需要優(yōu)先被調(diào)度;
1 號(hào)線程的優(yōu)先級(jí)是 51,小于 2 號(hào)線程的優(yōu)先級(jí) 52,因此應(yīng)該是 2 號(hào)線程結(jié)束之后,才輪到 1 號(hào)線程執(zhí)行;
3 號(hào)和 4 號(hào)線程是普通進(jìn)程,它倆需要等到 1 號(hào)和 2 號(hào)線程全部執(zhí)行結(jié)束之后才開(kāi)始執(zhí)行,并且 3 號(hào)和 4 號(hào)線程應(yīng)該是交替執(zhí)行,因?yàn)樗鼈z的調(diào)度策略和優(yōu)先級(jí)都是一樣的。
我滿懷希望的在工作電腦中測(cè)試,打印結(jié)果如下:
====> thread_index = 4
thread_index 4: SCHED_OTHER
thread_index 4: priority = 0
====> thread_index = 1
thread_index 1: SCHED_FIFO
thread_index 1: priority = 51
====> thread_index = 2
thread_index 2: SCHED_FIFO
thread_index 2: priority = 52
thread_index 2: num = 0
thread_index 4: num = 0
====> thread_index = 3
thread_index 3: SCHED_OTHER
thread_index 3: priority = 0
thread_index 1: num = 0
thread_index 2: num = 1
thread_index 4: num = 1
thread_index 3: num = 0
thread_index 1: num = 1
thread_index 2: num = 2
thread_index 4: num = 2
thread_index 3: num = 1
后面打印內(nèi)容不用輸出了,因?yàn)榍懊嬉呀?jīng)出現(xiàn)了問(wèn)題。
發(fā)表評(píng)論
請(qǐng)輸入評(píng)論內(nèi)容...
請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字
圖片新聞
-

OpenAI發(fā)布的AI瀏覽器,市場(chǎng)為何反應(yīng)強(qiáng)烈?
-

馬云重返一線督戰(zhàn),阿里重啟創(chuàng)始人模式
-

機(jī)器人奧運(yùn)會(huì)戰(zhàn)報(bào):宇樹(shù)機(jī)器人摘下首金,天工Ultra搶走首位“百米飛人”
-

存儲(chǔ)圈掐架!江波龍起訴佰維,索賠121萬(wàn)
-

長(zhǎng)安汽車母公司突然更名:從“中國(guó)長(zhǎng)安”到“辰致科技”
-

豆包前負(fù)責(zé)人喬木出軌BP后續(xù):均被辭退
-

字節(jié)AI Lab負(fù)責(zé)人李航卸任后返聘,Seed進(jìn)入調(diào)整期
-

員工持股爆雷?廣汽埃安緊急回應(yīng)
最新活動(dòng)更多
-
11月7日立即參評(píng)>> 【評(píng)選】維科杯·OFweek 2025(第十屆)物聯(lián)網(wǎng)行業(yè)年度評(píng)選
-
11月20日立即報(bào)名>> 【免費(fèi)下載】RISC-V芯片發(fā)展現(xiàn)狀與測(cè)試挑戰(zhàn)-白皮書
-
即日-11.25立即下載>>> 費(fèi)斯托白皮書《柔性:汽車生產(chǎn)未來(lái)的關(guān)鍵》
-
11月27日立即報(bào)名>> 【工程師系列】汽車電子技術(shù)在線大會(huì)
-
11月28日立即下載>> 【白皮書】精準(zhǔn)洞察 無(wú)線掌控——283FC智能自檢萬(wàn)用表
-
12月18日立即報(bào)名>> 【線下會(huì)議】OFweek 2025(第十屆)物聯(lián)網(wǎng)產(chǎn)業(yè)大會(huì)
推薦專題
- 1 特斯拉工人被故障機(jī)器人打成重傷,索賠3.6億
- 2 AI 時(shí)代,阿里云想當(dāng)“安卓” ,那誰(shuí)是“蘋果”?
- 3 拐點(diǎn)已至!匯川領(lǐng)跑工控、埃斯頓份額第一、新時(shí)達(dá)海爾賦能扭虧為盈
- 4 L3自動(dòng)駕駛延期,逼出車企技術(shù)自我淘汰
- 5 隱退4年后,張一鳴久違現(xiàn)身!互聯(lián)網(wǎng)大佬正集體殺回
- 6 機(jī)器人9月大事件|3家國(guó)產(chǎn)機(jī)器人沖刺IPO,行業(yè)交付與融資再創(chuàng)新高!
- 7 谷歌“香蕉”爆火啟示:國(guó)產(chǎn)垂類AI的危機(jī)還是轉(zhuǎn)機(jī)?
- 8 7倍機(jī)器人大牛股:高管股東套現(xiàn)VS機(jī)構(gòu)兇猛抱團(tuán),該信誰(shuí)?
- 9 八部門聯(lián)手放行L3自動(dòng)駕駛!巨頭開(kāi)始拼搶萬(wàn)億市場(chǎng)?
- 10 OpenAI發(fā)布的AI瀏覽器,市場(chǎng)為何反應(yīng)強(qiáng)烈?
- 高級(jí)軟件工程師 廣東省/深圳市
- 自動(dòng)化高級(jí)工程師 廣東省/深圳市
- 光器件研發(fā)工程師 福建省/福州市
- 銷售總監(jiān)(光器件) 北京市/海淀區(qū)
- 激光器高級(jí)銷售經(jīng)理 上海市/虹口區(qū)
- 光器件物理工程師 北京市/海淀區(qū)
- 激光研發(fā)工程師 北京市/昌平區(qū)
- 技術(shù)專家 廣東省/江門市
- 封裝工程師 北京市/海淀區(qū)
- 結(jié)構(gòu)工程師 廣東省/深圳市


分享





