1、執行緒同步的目的是不管執行緒之間的執行如何穿插,其執行結果都是正確的。即保證多執行緒執行下結果的確定性。
2、同步就是讓所有執行緒按照一定的規則執行,使得其正確性和效率都有跡可循,即執行緒同步就是對執行緒之間的穿插進行控制。
3、每個物件都對應於乙個**" 互斥鎖"** 的標記,這個標記用來保證在任一時刻,只能有乙個執行緒訪問該物件。
4、互斥鎖
5、鎖的特性:
int
pthread_mutex_init
(pthread_mutex_t *mutex,
const pthread_mutexattr_t * attr)
int
pthread_mutex_lock
(pthread_mutex_t *mutex)
int
pthread_mutex_trylock
(pthread_mutex_t *mutex)
int
pthread_mutex_unlock
(pthread_mutex_t *mutex)
int
pthread_mutex_destory
(pthread_mutex_t *mutex)
主線程負責接收使用者操作,函式執行緒負責將使用者輸入列印到終端介面
char buff[
128]=;
//資料要從主線程傳入函式執行緒
pthread_mutex_t mutex;
//定義鎖,一般將鎖定義在全域性
void
*fun
(void
*arg)
printf
("fun : %s\n"
, buff)
;memset
(buff,0,
128)
;int n =
rand()
%3+1
;sleep
(n);
// 保證主線程能夠加鎖成功
pthread_mutex_unlock
(&mutex)
;//解鎖
n =rand()
%3+1
;sleep
(n);}}
intmain()
int n =
rand()
%3+1
;sleep
(n);
// 保證函式執行緒加鎖成功
}pthread_join
(id,
null);
//等待id執行緒的結束
pthread_mutex_destroy
(&mutex)
;//執行緒銷毀
exit(0
);}
Linux執行緒同步(一)之使用互斥量(互斥鎖)
當多個控制線程共享相同的記憶體時,需要確保每個執行緒看到一致的資料檢視。如果每個執行緒使用的變數都是其他執行緒不會讀取或修改的,那麼就不存在一致性問題。同樣地,如果變數是唯讀的,多個執行緒同時讀取該量也不會有一致性問題。但是,當某個執行緒可以修改變數,而其他執行緒也可以讀取或者修改這個變數的時候,就...
執行緒同步 互斥量
下面以乙個簡單的多執行緒程式來演示如何使用互斥量來進行執行緒同步。在主線程中,我們建立子執行緒,並把陣列msg作為引數傳遞給子執行緒,然後主線程呼叫函式pthread mutex lock對互斥量加鎖,等待輸入,輸入完成後,呼叫函式pthread mutex unlock對互斥量解鎖,從而使執行緒函...
執行緒同步 互斥量
互斥量的使用 執行緒同步之互斥量 include include include include include include include using namespace std 全域性變數,兩個執行緒都可以修改,因此修改的時候需要加鎖 int g value 0 互斥量 pthread mu...