執行緒間同步
同乙個程序的多個執行緒之間共享了很多資源,對這些資源的訪問需要同步,防止出現不一致的情況
執行緒的標識為pthread_t型別,不能把它簡單的當做乙個整數處理,因為有些實現把它實現為乙個結構。(程序的標識型別為pid_t,是乙個非負整數)
#include
intpthread_equal
(pthread_t tid1, pthread_t tid2)
;pthread_t pthread_self
(void
);
#include
intpthread_create
(pthread_t *restrict tidp,
const pthread_attr_t *restrict attr,
void*(
*start_rtn)
(void*)
,void
*restrict arg)
;
#include
void
pthread_exit
(void
*rval_ptr)
;//rval_ptr指向的記憶體不應該是執行緒獨享的
intpthread_join
(pthread_t thread,
void
**rval_ptr)
;int
pthread_cancel
(pthread_t tid)
;void
pthread_cleanup_push
(void
(*rtn)
(void*)
,void
* arg)
;void
pthread_cleanup_pop
(int execute)
;int
pthread_detach
(pthread_t tid)
;
對乙個記憶體單元中儲存的值進行修改分為三步:從記憶體單元讀入暫存器,在記憶體器中對變數做修改,把新的值寫回記憶體單元。如果這三個步驟不是原子操作,就可能會出現競爭(多個執行緒觀察到的資料不一致)。
#include
intpthread_mutex_init
(pthread_mutex_t *restrict mutex,
const pthread_mutexattr_t *restrict attr)
;//互斥量使用前必須初始化
pthread_mutex_t mt = pthread_mutex_initializer;
//這種初始化方式只適用於靜態分配的互斥量
intpthread_mutex_destroy
(pthread_mutex_t *mutex)
;//如果動態分配互斥量,在釋放記憶體前要destroy
intpthread_mutex_lock
(pthread_mutex_t *mutex)
;int
pthread_mutex_trylock
(pthread_mutex_t *mutex)
;//如果不能鎖住互斥量,返回ebusy
intpthread_mutex_unlock
(pthread_mutex_t *mutex)
;
#include
#include
intpthread_mutex_timedlock
(pthread_mutex_t *restric mutex,
const
struct timespec *restric tsptr)
;
#include
intpthread_rwlock_init
(pthread_rwlock_t *restrict rwlock,
const pthread_rwlockattr_t *restrict attr)
;pthread_rwlock_t rwlock = pthread_rwlock_initializer;
//這種初始化方式只適用於靜態分配的讀寫鎖
intpthread_rwlock_destroy
(pthread_rwlock_t *rwlock)
;//必須銷毀
intpthread_rwlock_rdlock
(pthread_rwlock_t *rwlock)
;int
pthread_rwlock_wrlock
(pthread_rwlock_t *rwlock)
;int
pthread_rwlock_unlock
(pthread_rwlock_t *rwlock)
;int
pthread_rwlock_trywrlock
(pthread_rwlock_t *rwlock)
;int
pthread_rwlock_tryrdlock
(pthread_rwlock_t *rwlock)
;int
pthread_rwlock_timedrdlock
(pthread_rwlock_t *restrict rwlock,
const
struct timespec *restrict tsptr)
;int
pthread_rwlock_timedwrlock
(pthread_rwlock_t *restrict rwlock,
const
struct timespec *restrict tsptr)
;
#include
intpthread_cond_init
(pthread_cond_t *restrict cond,
const pthread_condattr_t *restrict attr)
;pthread_cond_t condv = pthread_cond_initializer;
//只能用於初始化靜態分配的條件變數
intpthread_cond_destroy
(pthread_cond_t *cond)
;int
pthread_cond_wait
(pthread_cond_t *restrict cond, pthread_mutex_t *restrict mutex)
;int
pthread_cond_timewait
(pthread_cond_t *restrict cond, pthread_mutex_t *restrict mutex,
const
struct timespec *restrict tsptr)
;//相對時間
intpthread_cond_signal
(pthread_cond_t *cond)
;//至少能喚醒乙個等待該條件的執行緒
intpthread_cond_broadcast
(pthread_cond_t *cond)
;//喚醒所有等待該條件的執行緒
執行緒間同步幾種方式
程序中線程同步的四種常用方式 1 臨界區 ccriticalsection 當多個執行緒訪問乙個獨占性共享資源時,可以使用臨界區物件。擁有臨界區的執行緒可以訪問被保護起來的資源或 段,其他執行緒若想訪問,則被掛起,直到擁有臨界區的執行緒放棄臨界區為止。具體應用方式 1 定義臨界區物件ccritica...
執行緒間同步
1.臨界區 當多個執行緒訪問乙個獨占性共享資源時,可以使用臨界區物件。擁有臨界區的執行緒可以訪問被保護起來的資源或 段,其他執行緒若想訪問,則被掛起,直到擁有臨界區的執行緒放棄臨界區為止。2.原子操作原理 單cpu可以暫時遮蔽全部中斷,多cpu通過指令來保證同一時刻只有乙個cpu對其進行操作 1.事...
同步互斥(執行緒間的通訊方式)
執行緒間使用全域性變數進行通訊。同步互斥 首先分為同步和互斥兩個部分 同步 這一一種協作關係,為了完成默寫任務,操作,多程序或者執行緒間形成的一種協調,萬兆有序的步驟執行操作。互斥 當全域性變數被乙個執行緒使用的時候,其他的執行緒不能對該資料進行操作,必須要等到資源被釋放後才能拿來使用。執行緒同步互...