訊號量用來各執行緒中通訊。我簡單的將訊號量想象成烽火台發出的煙,向遠處傳達訊號。**嘗試將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中訊號量分為二值訊號量 互斥訊號量 計數訊號量和遞迴互斥訊號量,應用場景各不同。二值訊號量通常用於互斥訪問或同步,二值訊號量和互斥訊號量非常相似,但互斥訊號量有優先順序,二值訊號量沒有。因此二值訊號...