[頭文件]
#include <pthread.h>
[注意]
互斥鎖是非異步安全,也就是說在信號處理中使用互斥鎖容易造成死鎖
[創建]
/*
* @brief 靜態創建並初始化互斥鎖
* @param[in] PTHREAD_MUTEX_INITIALIZER 互斥鎖結構常量
*/
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
/*
* @brief 初始化互斥鎖
* @param[in|out] mutex 互斥鎖
* @param[in] attr 互斥鎖屬性
* @NULL 默認屬性
* @return 初始化結果
* @li 0 初始化成功
* @li !0 標準錯誤碼
*/
int pthread_mutex_init(pthread_mutex_t * mutex, const pthread_mutexattr_t * attr);
[操作]
/*
* @brief 加鎖
* @param[in|out] mutex 互斥鎖
* @return 結果
* @li 0 成功
* @li !0 標準錯誤碼
*/
int pthread_mutex_lock(pthread_mutex_t *mutex);
/*
* @brief 嘗試加鎖
* @param[in|out] mutex 互斥鎖
* @return 結果
* @li 0 成功
* @li !0 標準錯誤碼
*/
int pthread_mutex_trylock(pthread_mutex_t *mutex);
/*
* @brief 解鎖
* @param[in|out] mutex 互斥鎖
* @return 結果
* @li 0 成功
* @li !0 標準錯誤碼
*/
int pthread_mutex_unlock(pthread_mutex_t *mutex);
[銷燬]
/*
* @brief 釋放互斥鎖佔用的所有資源
* @param[in|out] mutex 互斥鎖
* @return 結果
* @li 0 成功
* @li !0 標準錯誤碼
* @notes 銷燬的時候,鎖必須處於釋放狀態
*/
int pthread_mutex_destroy(pthread_mutex_t *mutex);
例子:
#include <stdio.h>
#include <pthread.h>
pthread_mutex_t mutex;
void *thread(void *arg)
{
int i = 0;
sleep(1);
pthread_mutex_lock(&mutex);
while (i++ < 5)
{
printf("this is thread!\n");
sleep(1);
}
pthread_mutex_unlock(&mutex);
return (void *)0;
}
int main(int argc, char **argv)
{
pthread_t id;
void *ret;
int i = 0;
pthread_create(&id, NULL, thread, NULL);
pthread_mutex_init(&mutex, NULL);
sleep(3);
pthread_mutex_lock(&mutex);
while (i++ < 5)
{
printf("this is main!\n");
sleep(1);
}
pthread_mutex_unlock(&mutex);
pthread_join(id, &ret);
return 0;
}
注意:編譯時加上-lpthread,否則編譯不過