生活随笔
收集整理的這篇文章主要介紹了
环状同步造成的死锁问题
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
文章目錄
1 環(huán)狀同步造成的死鎖問題
競爭資源造成的死鎖:
環(huán)路等待事件引發(fā)死鎖:
示例代碼如下:
#include "tinyOS.h"
#include "app.h"
#include "hal.h"static tTask task1
;
static tTask task2
;
static tTask task3
;
static tTask task4
; static tTaskStack task1Env
[TASK1_ENV_SIZE
];
static tTaskStack task2Env
[TASK2_ENV_SIZE
];
static tTaskStack task3Env
[TASK3_ENV_SIZE
];
static tTaskStack task4Env
[TASK4_ENV_SIZE
]; int task1Flag
;
int task2Flag
;
int task3Flag
;
int task4Flag
; tSem task1WaitSem
;
tSem task2WaitSem
;
tSem task3WaitSem
;
void task1Entry
(void *param
) {for (;;) {tSemWait(&task1WaitSem
, 0);task1Flag
= 1;tTaskDelay(1);tSemNotify(&task2WaitSem
);task1Flag
= 0;tTaskDelay(1);}
}
void task2Entry
(void *param
) {for (;;) {tSemWait(&task2WaitSem
, 0);task2Flag
= 1;tTaskDelay(1);tSemNotify(&task3WaitSem
);task2Flag
= 0;tTaskDelay(1);}
}
void task3Entry
(void *param
) {for (;;) {tSemWait(&task3WaitSem
, 0);task2Flag
= 1;tTaskDelay(1);tSemNotify(&task1WaitSem
);task2Flag
= 0;tTaskDelay(1);}
}
void task4Entry
(void *param
) {for (;;) {task4Flag
= 1;tTaskDelay(1);task4Flag
= 0;tTaskDelay(1);}
}
void tInitApp
(void) {halInit();tSemInit(&task1WaitSem
, 0, 1);tSemInit(&task2WaitSem
, 0, 1);tSemInit(&task3WaitSem
, 0, 1);tTaskInit(&task1
, task1Entry
, (void *) 0x0, TASK1_PRIO
, task1Env
, sizeof(task1Env
));tTaskInit(&task2
, task2Entry
, (void *) 0x0, TASK2_PRIO
, task2Env
, sizeof(task2Env
));tTaskInit(&task3
, task3Entry
, (void *) 0x0, TASK3_PRIO
, task3Env
, sizeof(task3Env
));tTaskInit(&task4
, task4Entry
, (void *) 0x0, TASK4_PRIO
, task4Env
, sizeof(task4Env
));
}
參考資料:
手把手教你學(xué)用嵌入式操作系統(tǒng)
總結(jié)
以上是生活随笔為你收集整理的环状同步造成的死锁问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。