使用互斥鎖實作線程同步時一般有四個步驟:
- 初始化互斥鎖 //pthread_mutex_init()
- 加鎖 //pthread_mutex_lock()、pthread_mutex_trylock
- 解鎖 //pthread_nutex_unlock()
- 銷毀鎖 pthread_mutex_destroy()
#include<stdio.h>
#include<stdlib.h>
#include<pthread.h>
#include<string.h>
pthread_mutex_t mutex;
int cout=1;
int status=21;
void* pthread_func(void* arg)
{
int idx1=0;
while(idx1<100000)
{
pthread_mutex_lock(&mutex);
printf("%d\n",cout++);
pthread_mutex_unlock(&mutex);
idx1++;
}
pthread_exit(&status);
}
int main()
{
pthread_t pthread_id;
/*設定線程分離*/
pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);
/*初始化互斥鎖*/
pthread_mutex_init(&mutex,NULL);
/*建立線程*/
strerror(pthread_create(&pthread_id,&attr,pthread_func,NULL));
/*住線程循環數數*/
int idx=0;
while(idx<100000)
{
pthread_mutex_lock(&mutex);
printf("%d\n",cout++);
pthread_mutex_unlock(&mutex);
idx++;
}
/*銷毀互斥鎖*/
pthread_mutex_destroy(&mutex);
/*銷毀分離屬性*/
pthread_attr_destroy(&attr);
pthread_exit(NULL);
// void* retval=NULL;
// pthread_join(pthread_id,&retval);
// printf("%d\n",*(int*)retval);
return 0;
}
注意:設定了線程分離的屬性以後就不能再使用pthread_join()回收子線程的資源了,否則會造成程式崩潰;
還有一種設定線程分離的方法是pthread_detach()函數;