本文主要是介绍pthread_mutex_init, pthread_mutex_lock, pthread_mutex_unlock,函数(线程互斥的例子),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
转自:http://blog.csdn.net/wangpengqi/article/details/7867505
/*
#include <pthread.h>
int pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrict attr);
int pthread_mutex_destroy(pthread_mutex_t *mutex);
在使用互斥锁前,需要定义互斥锁(全局变量),定义互斥锁对象形式为:
pthread_mutex_t lock;
在 pthread_mutex_init() 函数中:
第一个参数 mutex 是指向要初始化的互斥锁的指针。
第二个参数 mutexattr 是指向属性对象的指针,该属性对象定义要初始化的互斥锁的属性。如果该指针为 NULL,则使用默认的属性。
此外,还可以用宏 PTHREAD_MUTEX_INITIALIZER 来初始化静态分配的互斥锁,如下:
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
在 pthread_mutex_init() 函数中:
第一个参数 mutex 是指向要初始化的互斥锁的指针。
第二个参数 mutexattr 是指向属性对象的指针,该属性对象定义要初始化的互斥锁的属性。如果该指针为 NULL,则使用默认的属性。
此外,还可以用宏 PTHREAD_MUTEX_INITIALIZER 来初始化静态分配的互斥锁,如下:
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
对于静态初始化的互斥锁,不需要调用 pthread_mutex_init() 函数。
*/
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
void *function( void *arg);
pthread_mutex_t mutex;
int counter = 0;
int main( int argc, char *argv[])
{
int rc1,rc2;
char *str1= "wenhaoll" ;
char *str2= "linglong" ;
pthread_t thread1,thread2;
pthread_mutex_init(&mutex,NULL);
if ((rc1 = pthread_create(&thread1,NULL,function,str1)))
{
fprintf(stdout, "thread 1 create failed: %d\n" ,rc1);
}
if (rc2=pthread_create(&thread2,NULL,function,str2))
{
fprintf(stdout, "thread 2 create failed: %d\n" ,rc2);
}
pthread_join(thread1,NULL);
pthread_join(thread2,NULL);
return 0;
}
void *function( void *arg)
{
char *m;
m = ( char *)arg;
pthread_mutex_lock(&mutex);
while (*m != '\0' )
{
printf( "%c" ,*m);
fflush(stdout);
m++;
sleep(1);
}
printf( "\n" );
pthread_mutex_unlock(&mutex);
}
这篇关于pthread_mutex_init, pthread_mutex_lock, pthread_mutex_unlock,函数(线程互斥的例子)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!