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