线程锁实例2---读写加锁实例

简介: #include #include #include struct student{ int a ; int b ; int c ; int d ; int e ; int f ;};char stu[6] = {10,10,10,10,10,10};/...
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
struct student
{
	int a ; 
	int b ; 
	int c ; 
	int d ; 
	int e ; 
	int f ;
};

char stu[6] = {10,10,10,10,10,10};


//初始化一个线程mutex锁  主要用途是防止资源访问竞争
pthread_mutex_t   Mutex = PTHREAD_MUTEX_INITIALIZER ; 

int  write_stu(int value , const char *name);
void read_stu(void);

void *do_thread(void *arg);

int main(void)
{
	pthread_t  tid ; 
//	struct student stu = {10,20};
	int ret ; 
	ret = pthread_create(&tid , NULL , do_thread , (void *)100);
//	ret = pthread_create(&tid , NULL , do_thread , (void *)(&stu));
	if(ret < 0)
	{
		perror("create thread fail");
		return -1 ; 
	}
	
	ret = pthread_detach(tid);
	
	sleep(2);

	write_stu(80 , "main thread");


	return 0 ; 
}
void *do_thread(void *arg)
{
	//写数据函数
	//写数据的时候加把锁,为了防止读和写同时进行
	write_stu(50 , "thread");
	//读数据函数
	read_stu();
}
	
int  write_stu(int value , const char *name)
{
	//总共操作时间用6秒
	int i ; 
	//给一个线程上锁
	//上锁,这时候只写
	pthread_mutex_lock(&Mutex);
	for(i = 0 ; i < 6 ; i++)
	{
		stu[i] = value ; 
		printf("%s write value:%d \n" , name , value);
		sleep(1);
	}
	//写完了,解锁
	pthread_mutex_unlock(&Mutex);
}

//读数据
void read_stu(void)
{
	int i ; 
	for(i = 0 ; i < 6 ; i++)
	{
		printf("stu[%d] : %d \n" , i , stu[i]);
	}
}	

目录
相关文章
|
安全 Java 调度
Java编程时多线程操作单核服务器可以不加锁吗?
Java编程时多线程操作单核服务器可以不加锁吗?
148 2
|
9月前
|
并行计算 安全 Java
Python GIL(全局解释器锁)机制对多线程性能影响的深度分析
在Python开发中,GIL(全局解释器锁)一直备受关注。本文基于CPython解释器,探讨GIL的技术本质及其对程序性能的影响。GIL确保同一时刻只有一个线程执行代码,以保护内存管理的安全性,但也限制了多线程并行计算的效率。文章分析了GIL的必要性、局限性,并介绍了多进程、异步编程等替代方案。尽管Python 3.13计划移除GIL,但该特性至少要到2028年才会默认禁用,因此理解GIL仍至关重要。
574 16
Python GIL(全局解释器锁)机制对多线程性能影响的深度分析
|
11月前
|
供应链 安全 NoSQL
PHP 互斥锁:如何确保代码的线程安全?
在多线程和高并发环境中,确保代码段互斥执行至关重要。本文介绍了 PHP 互斥锁库 `wise-locksmith`,它提供多种锁机制(如文件锁、分布式锁等),有效解决线程安全问题,特别适用于电商平台库存管理等场景。通过 Composer 安装后,开发者可以利用该库确保在高并发下数据的一致性和安全性。
153 6
|
10月前
|
Java 关系型数据库 MySQL
【JavaEE“多线程进阶”】——各种“锁”大总结
乐/悲观锁,轻/重量级锁,自旋锁,挂起等待锁,普通互斥锁,读写锁,公不公平锁,可不可重入锁,synchronized加锁三阶段过程,锁消除,锁粗化
|
12月前
|
运维 API 计算机视觉
深度解密协程锁、信号量以及线程锁的实现原理
深度解密协程锁、信号量以及线程锁的实现原理
181 2
|
12月前
|
Java 应用服务中间件 测试技术
Java21虚拟线程:我的锁去哪儿了?
【10月更文挑战第8天】
244 0
|
12月前
|
安全 调度 数据安全/隐私保护
iOS线程锁
iOS线程锁
106 0
|
12月前
|
Java API
【多线程】乐观/悲观锁、重量级/轻量级锁、挂起等待/自旋锁、公平/非公锁、可重入/不可重入锁、读写锁
【多线程】乐观/悲观锁、重量级/轻量级锁、挂起等待/自旋锁、公平/非公锁、可重入/不可重入锁、读写锁
105 0
|
12月前
|
安全 Java 程序员
【多线程-从零开始-肆】线程安全、加锁和死锁
【多线程-从零开始-肆】线程安全、加锁和死锁
193 0
|
12月前
|
安全 Linux
Linux线程(十一)线程互斥锁-条件变量详解
Linux线程(十一)线程互斥锁-条件变量详解