工作筆記 訊號量

2021-07-27 08:16:21 字數 1377 閱讀 6139

訊號量用來各執行緒中通訊。我簡單的將訊號量想象成烽火台發出的煙,向遠處傳達訊號。

**嘗試將globvar增加20000次,乙個執行緒增加10000次。用訊號量來代替互斥鎖,使一次只有乙個執行緒對globvar變數進行操作。**經過dev c++測試多次,其中5次中有一次錯誤的獲得19995

#include #include #include #include #include #include void *thread_function(void *arg);

void *thread_function1(void *arg);

void *thread_function2(void *arg);

/* 訊號量 */

sem_t bin_sem;

/* 互斥鎖 */

pthread_mutex_t mtx = pthread_mutex_initializer;

long

long globvar = 0;

pthread_t a_thread;

pthread_t thread1;

pthread_t thread2;

int main()

/* 建立新執行緒1 */

res = pthread_create(&thread1, null, thread_function1, null);

if (res != 0)

/* 建立新執行緒2 */

res = pthread_create(&thread2, null, thread_function2, null);

if (res != 0)

/* 等待所有子執行緒結束 */

pthread_join(thread1, &pret);

pthread_join(thread2, &pret);

/* 列印最後的globvar值 */

printf("globvar=%d", globvar);

return0;}

/** *@brief globvar增加10000次

*@param none

*@retval

*@author

*@date

*/void *thread_function1(void *arg)

}/**

*@brief globvar增加10000次

*@param none

*@retval

*@author

*@date

*/void *thread_function2(void *arg)

}

訊號量工作原理

一 核心相關檔案為include linux semaphore.h和kernel semaphore.c 二 主要結構體 struct semaphore 結構體成員變數解讀 1 lock主要用於保護count和wait list鍊錶的訪問 2 count記錄訊號量等待程序的計數 3 wait l...

筆記 訊號量集

訊號量集,主要作用是保證共享記憶體的使用不發生衝突。訊號量 semaphore 實際是乙個整數,它的值由多個程序進行測試 test 和設定 set 就每個程序所關心的測試和設定操作而言,這兩個操作是不可中斷的,或稱 原子 操作,即一旦開始直到兩個操作全部完成。測試和設定操作的結果是 訊號量的當前值和...

訊號量 二值訊號量

訊號量 二值訊號量 訊號量是作業系統的重要部分,訊號量一般用來進行資源管理和任務同步。freertos中訊號量分為二值訊號量 互斥訊號量 計數訊號量和遞迴互斥訊號量,應用場景各不同。二值訊號量通常用於互斥訪問或同步,二值訊號量和互斥訊號量非常相似,但互斥訊號量有優先順序,二值訊號量沒有。因此二值訊號...