linux執行緒,互斥量,讀寫鎖,條件變數和屏障

2021-08-04 10:41:39 字數 2209 閱讀 4903

1.建立執行緒

pthread_create(&tid,null,func,null);

2.id執行緒識別符號

pthread_t tid;

pthread_equal(tid1,tid2);

pthread_t pthread_self();

3.執行緒終止條件

a) pthread_exit();

b) return;

c) 其他執行緒呼叫pthread_cancel(tid);

4.pthread_cleanup_push(void (*rtn)(void *),void* arg)

pthread_cleanup_pop(int exec);

執行push條件:

a)pthread_exit();

b)pthread_cancel();

c)exec為非零;

5.pthread_create()和

pthread_exit()

可用於返回結構複雜的指標型別;

6.pthread_cancel()呼叫時,執行緒退出,

pthread_join(void ** ret);

返回值為

pthread_canceled;

7.互斥鎖

1)初始化

pthread_mutex_t m_lock = pthread_mutex_initialized;

pthread_mutex_init(&m_lock);

2)反初始化

pthread_mutex_destory(&m_lock);

3)上鎖

pthread_mutex_lock(&m_lock);

4)解鎖

pthread_mutex_lock(&m_lock);

8.讀寫鎖(非常適用於資料結構)

1)初始化

pthread_rwlock_t rwlock;

pthread_rwlock_init(&rwlock);

2)反初始化

pthread_rwlock_destory(&rwlock);

3)上鎖

pthread_rwlock_rdlock(&rwlock);(上讀鎖)

pthread_rwlock_wrlock(&rwlock);(上寫鎖)

4)解鎖

pthread_rwlock_unlock(&rwlock);

多個讀鎖狀態下pthread_rwlock_rdlock(&rwlock)返回值為讀寫鎖的個數;

a)多讀一寫

b)讀狀態下,加寫鎖線程阻塞

c)寫狀態下,加讀鎖線程阻塞

9.條件變數

鎖--->(解鎖

---->

等待------>

加鎖)---->解鎖

a) 初始化

pthread_cond_t cond = pthread_cond_initialized;

pthread_cond_init(&cond);

b) 反初始化

pthread_cond_destory(&cond);

c) 等待

pthread_cond_wait(&cond,&mutex);

d) 喚醒

pthread_cond_signal(&cond);喚醒乙個等待變數

pthread_cond_broadcast(&cond);喚醒所有等待變數

pthread_mutex_lock(&m_lock)

while(a==1)

pthread_mutex_unlock(&m_lock);

10.屏障(讓任意數量的執行緒完成後到達屏障後,在進行下一步工作)

a) 初始化

pthread_barrier_t barrier;

pthread_barrier_init(&barrier,null,count);

b) 反初始化

pthread_barrier_destory(&barrier);

c) 到達屏障計數

pthread_barrier_wait(&barrier);(呼叫此函式成功,

count-1);

for(count+1)

phread_create(&tid,null,func,null);

void *func(void* arg)

pthread_barrier_wait(&barrier);

LINUX多執行緒互斥量和讀寫鎖區別

執行緒的同步,發生在多個執行緒共享相同記憶體的時候,這時要保證每個執行緒在每個時刻看到的共享資料是一致的.如果每個執行緒使用的變數都是其他執行緒不會使用的 read write 或者變數是唯讀的,就不存在一致性問題.但是,如果兩個或兩個以上的執行緒可以read write乙個變數時,就需要對執行緒進...

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

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

APUE讀書筆記 執行緒互斥(互斥量 讀寫鎖)

這裡以檔案的引用計數做例子。什麼是引用計數?即指向這個檔案的鏈結數。只有當引用計數為0時,才能刪除該檔案,否則每一次刪除僅僅是i節點的引用計數減一。如果不引入鎖,那麼當同時執行兩次引用計數相減時,就會出現計數不準確的情況。一 簡單的鎖操作 include apue.h include include...