/*
* 執行緒同步——互斥量
* 建立兩個執行緒,使用互斥量使任一時刻只有乙個執行緒對全域性變數進行
操作* lzy 2011-6-19
*/#include
#include
#include
pthread_mutex_t mutex; /* 定義
互斥量 */
int x;
/* 定義全域性變數 */
void thread1(void) /* 定義執行緒1運
行的函式,其功能是對全域性變數x進行逐減操作 */
pthread_exit(null);
}void thread2(void) /* 定義執行緒2運
行的函式,功能與thread2相同 */
pthread_exit(null);
}int main(void)
x=10;
/* 對全域性變數賦初值 */
ret = pthread_create(&id1, null, (void *)&thread1, null);
/* 建立執行緒1 */
if(ret != 0)
ret = pthread_create(&id2, null, (void *)&thread2, null);
/* 建立執行緒2 */
if(ret != 0)
pthread_join(id1, null); /*執行緒
合併 */
pthread_join(id2, null);
return (0);}
/** 執行緒同步
* ——讀寫鎖
* 只要沒有程序持有某個給定的讀寫鎖用於寫,那麼任意數目的
執行緒都可持有該讀寫鎖用於讀
* 僅當沒有執行緒持有某個給定的讀寫鎖用於讀或寫,才能分配該
讀寫鎖用於寫。
* lzy 2011-6-19
*/#include
#include
#include
int product = 0; //定義全域性變數
pthread_rwlock_t rwlock = pthread_rwlock_initializer; //靜態
初始化讀寫鎖
void * threadread(void * arg) //執行緒函式讀
}void * tidproduce(void * arg) //執行緒函式寫 加1
}void * threadconsume(void * arg) //執行緒函式寫 減1
}int main(void)
}if(pthread_create(&tidproduce, null, tidproduce, null))
if(pthread_create(&tidconsume, null, threadconsume,
null))
pthread_exit(null); //等待所有執行緒結束
return 0;}
嵌入式 互斥鎖和讀寫鎖區別
執行緒同步 互斥量 建立兩個執行緒,使用互斥量使任一時刻只有乙個執行緒對全域性變數進行 操作 lzy 2011 6 19 include include include pthread mutex t mutex 定義 互斥量 int x 定義全域性變數 void thread1 void 定義執行...
嵌入式 自旋鎖 互斥鎖 讀寫鎖 遞迴鎖
互斥鎖 mutexlock 最常使用於執行緒同步的鎖 標記用來保證在任一時刻,只能有乙個執行緒訪問該物件,同一執行緒多次加鎖操作會造成死鎖 臨界區和互斥量都可用來實現此鎖,通常情況下鎖操作失敗會將該執行緒睡眠等待鎖釋放時被喚醒 自旋鎖 spinlock 同樣用來標記只能有乙個執行緒訪問該物件,在同一...
互斥鎖機制,互斥鎖與讀寫鎖區別
互斥鎖 mutex,用於保證在任何時刻,都只能有乙個執行緒訪問該物件。當獲取鎖操作失敗時,執行緒會進入睡眠,等待鎖釋放時被喚醒 讀寫鎖 rwlock,分為讀鎖和寫鎖。處於讀操作時,可以允許多個執行緒同時獲得讀操作。但是同一時刻只能有乙個執行緒可以獲得寫鎖。其它獲取寫鎖失敗的執行緒都會進入睡眠狀態,直...