无锡网站制作公司排名官方进一步优化
目录
一、安装完成POSIX 的man 手册
二、互斥锁
1、互斥锁基本知识
2、操作步骤
3、API
(1)pthread_mutex_init(初始化互斥锁)
(2)加锁/尝试加锁/解锁/销毁
4、代码
5、注意
一、安装完成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、注意
锁是进程内部的锁资源,重新启动/把进程杀死后资源就消失了