linux執行緒同步 互斥鎖 附可執行原始碼

2021-10-24 07:45:11 字數 1287 閱讀 5516

執行緒同步,即為多個執行緒在操作同乙個公共資料區域時,能保持資料的一致性,看下面**:

#include

#include

#include

int num =

100;

void

*mythread

(void

* p)

}int

main()

pthread_join

(t1,

null);

return0;

}

我們希望的結果是主線程中輸出num和t1執行緒中的num是不一樣的,同時在乙個while的結構體中,num應該是一樣的,那麼,看下面的輸出結果:

這個結果並不是我們想要的輸出。

要正確輸出結果,需要在運算元據加上鎖,只有拿到鎖的執行緒才能對公共資料進行操作。

先說一下互斥鎖,主要操作函式有:

pthread_mutex_init		//初始化互斥鎖

pthread_mutex_destroy //銷毀鎖

pthread_mutex_lock //加鎖

pthread_mutex_trylock //加鎖

pthread_mutex_unlock //解鎖

以上5個函式返回值都是:成功返回0,失敗返回錯誤號。

再者,pthread_mutex_t型別,其本質是乙個結構體,為簡化理解,應用可忽略其實現細節,簡單單程整數看待。

pthread_mutex_t mutex: 變數mutex只有兩種取值1,0

那麼,我們在操作公共區域加鎖,**如下:

#include

#include

#include

pthread_mutex_t lock;

int num =

100;

void

*mythread

(void

* p)

}int

main()

pthread_join

(t1,

null);

pthread_mutex_destroy

(&lock)

;return0;

}

執行結果如下:

從上面結果看,主線性和子執行緒,要在拿到鎖之後才進行資料操作,這樣就保證了資料同步。

Linux 執行緒同步 互斥量(互斥鎖)

1 執行緒同步的目的是不管執行緒之間的執行如何穿插,其執行結果都是正確的。即保證多執行緒執行下結果的確定性。2 同步就是讓所有執行緒按照一定的規則執行,使得其正確性和效率都有跡可循,即執行緒同步就是對執行緒之間的穿插進行控制。3 每個物件都對應於乙個 互斥鎖 的標記,這個標記用來保證在任一時刻,只能...

Linux多執行緒同步 互斥鎖

當多個執行緒對同乙個資源進行訪問的時候,為了這個資源的安全性,我們需要對這個資源進行鎖定,規定同一時間只有乙個資源能夠獲得該鎖的鑰匙,其它執行緒要獲得該資源需要等待該執行緒 互斥鎖建立 pthread mutex t mutex 互斥鎖初始化 mutex pthread mutex initiali...

Linux 執行緒同步方法 互斥鎖

在單執行緒條件下,由於對資料操作,在同樣的時間下,只有乙個執行緒來操作。所以不用擔心資料的同步問題。現代的作業系統,大都提供併發機制,雖然有時候是表面的併發。在 linux 中,併發用的最多的是基於執行緒的併發,程序的代價太高了,這樣,乙個共享的資料,在同一時間內,可能有多個執行緒在操作。如果沒有同...