Linux C併發控制

2021-09-02 16:07:58 字數 2298 閱讀 7826

linux執行緒介面也稱為pthread或posix執行緒,linux2.6以後,採用native posix執行緒庫的新執行緒實現。

1, 互斥量

標頭檔案pthread_mutex_t mtx = pthread_mutex_initializer;

靜態分配:

pthread_mutex_t mtx = pthread_mutex_initializer;

int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr)

int pthread_mutex_destroy(pthread_mutex_t *mutex)

操作函式:

int pthread_mutex_lock(pthread_mutex_t *mutex)

int pthread_mutex_trylock(pthread_mutex_t *mutex)

int pthread_mutex_unlock(pthread_mutex_t *mutex)

互斥量型別:

pthread_mutex_normal:不具有死鎖檢測功能,如執行緒試圖對已由自己鎖定的互斥量加鎖,則發生死鎖,互斥量處於未鎖定狀態,或者已由其他執行緒鎖定,對其解鎖會導致不確定的結果(在linux上,對這類互斥量的上述兩種操作都會成功)。

pthread_mutex_recursive:遞迴互斥量維護乙個計數器,加鎖遞增計數器,解鎖遞減計數器,為0時,釋放該互斥量。

2,讀寫鎖

int pthread_rwlock_init(pthread_rwlock_t *restict rwlock, const pthread_rwlockattr_t *restrict attr);

int pthread_rwlock_destroy(pthread_rwlock_t *restict rwlock);

int pthread_rwlock_rdlock(pthread_rwlock_t *restict rwlock);

int pthread_rwlock_wrlock(pthread_rwlock_t *restict rwlock);

int pthread_rwlock_unlock(pthread_rwlock_t *restict rwlock);

3,條件變數

int pthread_cond_init(pthread_cond_t *restict cond, const pthread_condattr_t *restrict attr);

int pthread_cond_destroy(pthread_cond_t *cond);

int pthread_cond_wait(pthread_cond_t *restict cond, pthread_mutex_t *restrict cond);

int pthread_cond_timedwait(pthread_cond_t *restict cond, pthread_mutex_t *restrict mutex, const struct timespec *restrict tsptr);

int pthread_cond_signal(pthread_cond_t *cond);

int pthread_cond_broadcast(pthread_cond_t *cond);

4,自旋鎖

int pthread_spin_init(pthread_spinlock_t *lock,int pshared);

int pthread_spin_destroy(pthread_spinlock_t *lock);

int pthread_spin_lock(pthread_spinlock_t *lock);

int pthread_spin_trylock(pthread_spinlock_t *lock);

int pthread_spin_unlock(pthread_spinlock_t *lock);

5,屏障

屏障是使用者協調多個執行緒並行工作的同步機制,允許每個執行緒等待,直到有合作的執行緒都到達某一點,然後從該點繼續執行。

int pthread_barrier_init(pthread_barrier_t *restrict barrier, const pthread_barrierattr_t *restrict attr, unsigned int count)

int pthread_barrier_destroy(pthread_barrier_t *barrier)

int pthread_barrier_wait(pthread_barrier_t *barrier)

LINUX c 併發同步

5.1 核心同步與死鎖問題 併發 兩個程序可以真正的在臨界區中同時執行。原因 1 中斷 2 軟中斷和tasklet 3 核心搶占 4 睡眠及與使用者空間的同步 5 對稱多處理 資料加鎖 1 如果有其他執行執行緒可以訪問這些資料 2 如果任何其他什麼東西都能看見它 3 幾乎訪問所有的核心全域性變數和共...

mysql 併發控制 mysql併發控制

mysql併發控制 當有多個查詢需要同時修改同乙個資料,就會產生併發控制的問題。mysql可以在兩個層面進行併發控制 伺服器層和儲存引擎層。mysql通過加鎖實現併發控制 鎖有兩類 讀鎖 共享鎖,即乙個讀鎖不會阻塞其它讀鎖,多個使用者可同時讀取同乙個資源,而不互相干擾。寫鎖 排他鎖,即乙個寫鎖會阻塞...

Linux C 程序控制

1.程式 程序 程序id pit t型別。2.get pid 取得程序idgetppid 取得父程序id。a getuid geteuid getgid getegid 取得使用者id及組id。3.fork函式建立新的程序。pid tfork void a fork函式不需要引數。b 對於父程序fo...