UNXI執行緒及執行緒間同步方式

2021-09-17 08:55:05 字數 3734 閱讀 6308

執行緒間同步

同乙個程序的多個執行緒之間共享了很多資源,對這些資源的訪問需要同步,防止出現不一致的情況

執行緒的標識為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.事...

同步互斥(執行緒間的通訊方式)

執行緒間使用全域性變數進行通訊。同步互斥 首先分為同步和互斥兩個部分 同步 這一一種協作關係,為了完成默寫任務,操作,多程序或者執行緒間形成的一種協調,萬兆有序的步驟執行操作。互斥 當全域性變數被乙個執行緒使用的時候,其他的執行緒不能對該資料進行操作,必須要等到資源被釋放後才能拿來使用。執行緒同步互...