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...