使用互斥锁实现线程同步时一般有四个步骤:
- 初始化互斥锁 //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()函数;