线程同步方式之互斥量

#include 
#include 
#include 
#include 
#include 

int lfx=0;
pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER; //对mutex进行初始化

//pthread_mutex_init(&mutex,NULL); 另一种初始化方式
void* writer(void *);

int main(int argc, char **argv)
{
        int i = 0;
        pthread_t NUM[5];
        for(i=0;i<5;i++)
        {
                pthread_create(&NUM[i],NULL,writer,NULL); //创建5个线程
        } 
        for(i=0;i<5;i++)
        {
                pthread_join(NUM[i],NULL);//5个线程阻塞
        }
        pthread_mutex_destroy(&mutex);
        printf("%d\n",lfx);
        exit(0);
}

void* writer(void* arg)
{
        pthread_mutex_lock(&mutex);
        ++lfx;
        pthread_mutex_unlock(&mutex);
}

/*

线程同步的方式:mutex(互斥量)
五个线程,同一时刻,只有一个线程可以锁住mutex,其它线程必须要等到这个
mutex解锁以后才能对lfx操作,也就是说那个线程成功上锁了,那个线程就可以
对这个全局变量进行操作,同一一时刻,那个线程可以成功锁住mutex是不确定的。

互斥量相关函数学习:

互斥量初始化函数,如果不用PTHREAD_MUTEX_INITIALIZER进行初始化,可以用这个函数。
pthread_mutex_init(pthread_mutex_t *restrict mutex, 
const pthread_mutexattr_t *restrict attr); 
        返回值:若成功,返回0,否则,返回错误编号

对一个互斥量进行回收处理工作。
pthread_mutex_destroy(pthread_mutex_t *mutex); 
        返回值:若成功,返回0,否则,返回错误编号

上锁函数:
pthread_mutex_lock(pthread_mutex_t *mutex);
                返回值:若成功,返回0,否则,返回错误编号

解锁函数:
pthread_mutex_unlock(pthread_mutex_t *mutex);
                返回值:若成功,返回0,否则,返回错误编号

尝试上锁函数:
pthread_mutex_trylock(pthread_mutex_t *mutex);
                返回值:若成功,返回0,否则,返回错误编号

pthread_mutex_lock(pthread_mutex_t *mutex);和pthread_mutex_trylock(pthread_mutex_t *mutex);
区别:pthread_mutex_lock如果互斥量没有上锁,则上锁,其它线程就会阻塞,而pthread_mutex_trylock
没有锁上,当前线程会给这把锁加锁,如果锁上了:不会阻塞。
	                  
*/

你可能感兴趣的:(linux环境高级编程)