目录
一、安装完成POSIX 的man 手册
sudo apt-get install manpages-posix-dev
二、互斥锁
1、互斥锁基本知识
实现的路基为互斥的逻辑时可以使用互斥锁来实现(使用互斥锁可以有效的保护某一个共共享资源, 使得该资源在任何情况下都只能有一个 线程在访问。)
2、操作步骤
(1)初始化互斥锁资源 pthread_mutex_init()
(2)访问某个资源之前先上锁 pthread_mutex_lock()
(3)访问结束后应该解锁 pthread_mutex_unlock()
(4)当不再使用的时候应该销毁到锁资源 pthread_mutex_destroy ( )
3、API
(1)pthread_mutex_init(初始化互斥锁)
(2)加锁/尝试加锁/解锁/销毁
4、代码
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
#include <unistd.h>
//共享内存
char * mem_map = NULL ;
// 定义一个线程间可以互相访问的锁资源
pthread_mutex_t lock ;
void *FUNC(void * arg)
{
while ( 1 )
{
// 阻塞等待锁资源
printf("FUNC:等待锁资源获得!!\n");
pthread_mutex_lock(&lock);
printf("FUNC:成功获得锁资源并已上锁!!\n");
printf("FUNC:收到的消息为:%s\n" , mem_map );
sleep(1);
// 解锁
pthread_mutex_unlock(&lock);
printf("FUNC:已解锁!!\n");
}
}
int main(int argc, char const *argv[])
{
// 先初始化线程间的“共享内存”
mem_map = calloc(128 , 1 );
// 初始化互斥锁
if(pthread_mutex_init(&lock, NULL ))
{
perror("init error");
return -1 ;
}
// 创建线程
pthread_t thread ;
pthread_create(&thread, NULL, FUNC , NULL );
while ( 1 )
{
// 阻塞等待锁资源
printf("MAIN:等待锁资源获得!!\n");
pthread_mutex_lock(&lock);
printf("MAIN:成功获得锁资源并已上锁!!\n");
fgets(mem_map , 128 , stdin );
sleep(1);
// 解锁
pthread_mutex_unlock(&lock);
printf("MAIN:已解锁!!\n");
}
return 0;
}
5、注意
锁是进程内部的锁资源,重新启动/把进程杀死后资源就消失了