编译 gcc a,c -lpthread
/***********************************************************************************/
//pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr);
// 初始化锁变量mutex。
// attr为锁属性,NULL值为默认属性。
//pthread_mutex_lock(pthread_mutex_t *mutex);
// 加锁(阻塞操作)
// 当锁已经在使用,挂起等待
//pthread_mutex_trylock(pthread_mutex_t *mutex);
// 试图加锁(不阻塞操作)
// 不同点:当锁已经在使用的时候,返回为EBUSY,而不是挂起等待。
//pthread_mutex_unlock(pthread_mutex_t *mutex);
// 解锁
//pthread_mutex_destroy(pthread_mutex_t *mutex);
// 释放锁
/*********************************************************************************/
#include<stdio.h>
#include <unistd.h>
#include<pthread.h>
int g_data = 0;
pthread_mutex_t mutex; //先声明锁变量
void *func1(void *arg)
{
printf("t1: %ld thread if create\n",(unsigned long)pthread_self());
printf("t1:param is %d \n",*((int *)arg));
pthread_mutex_lock(&mutex);
while(1){
printf("t1: %d \n",g_data++);
sleep(1);
if(g_data == 3)
{
pthread_exit(NULL); //线程退出
}
}
pthread_mutex_unlock(&mutex);
}
void *func2(void *arg)
{
printf("t2:%ld thread is create \n",(unsigned long)pthread_self());
printf("t2: param is %d\n",*((int *)arg));
while(1)
{
printf("t2: %d \n",g_data++);
pthread_mutex_lock(&mutex);
g_data++;
pthread_mutex_unlock(&mutex);
sleep(1);
}
}
int main()
{
int ret;
int param =100;
pthread_t t1;
pthread_t t2;
pthread_mutex_init(&mutex,NULL); //初始化锁
ret =pthread_create(&t1,NULL,func1,(void *)¶m); //创建func1线程
if(ret == 0)
{
printf("main:create t1 success \n");
}
ret = pthread_create(&t2 ,NULL,func2,(void *)¶m); //创建func2线程
if(ret==0)
{
printf("main:create t2 success\n");
}
printf("main:%ld\n",(unsigned long)pthread_self());
while(1)
{
printf("main: %d \n",g_data++);
sleep(1); //如果我们想让当前线程真正睡眠一下子,最好是调用 Sleep(1) 或 SwitchToThread()。
}
pthread_join(t1,NULL); //线程等待
pthread_join(t2,NULL);
pthread_mutex_destroy(&mutex);
return 0;
}