线程同步学习

基于IC555的PWM信号发生器设计:从原理到电机调速与LED调光应用 脉冲宽度调制(PWM)是一种通过调节数字脉冲宽度来控制模拟信号电平的核心技术,其原理在于固定频率下改变高电平占空比,从而等效调节平均电压或功率。这项技术因其高效率、低损耗的特点,在电机调速、LED调光、开关电源等工程领域具有重要价值。本文聚焦于利用经典IC555定时器芯片构建PWM信号发生器,通过分析其无稳态工作模式及改进型电路设计,实现了占空比独立可调且频率稳定的信号输出。文中结合电机驱动与LED调光等具体应用场景,详细阐述了电路参数计算、元件选型、PCB设计及常见问题排查等实践要点,为电子爱好者与工程师 阅读详情

1、线程同步的定义

线程同步不是一起、相同,而是协调、协同的意思。
1)按预定的先后次序进行运行,如:您说完,我再说;线程A生成数据后交给线程B处理;
2)公共资源同一时刻只能被一个线程使用;共享数据在同一时刻只能被一个线程修改,以保证数据的完整性。
基于互斥锁、条件变量、信号量、自旋锁、读写锁。

线程安全的3大特性
1、原子性
原子性是指操作是不可分的。其表现在于对于共享变量的某些操作,应该是不可分的,必须连续完成。
2、可见性
可见性是指一个线程对共享变量的修改,另外一个线程能够立刻看到;

线程池

线程不是开的越多越好,过多可能导致系统的性能更低,CPU在每个线程之间轮询执行,线程数一多,切换线程也就是切换上下文的时间就多了,执行效率就可能降低。
所以就引入了线程池来管理线程,CPU把任务交给线程池,然后由线程池将任务分配给空闲的线程;如果无空闲线程,则会等待线程池里的线程执行完当前任务后再分配,执行任务完毕后再将线程交还给线程池

面试题:单例模式+多线程

单例模式:整个系统生命周期内,一个类只能产生一个实例,相同的内存地址。
好处:节省资源+方便控制(操控公共资源)

此时,需要考虑到线程安全的问题。(共享资源加锁 或者让线程也有自己的资源)
单例模式可以分为 懒汉式 和 饿汉式 ,两者之间的区别在于创建实例的时间不同。

懒汉式:系统运行中,实例并不存在,只有当需要使用该实例时,才会去创建并使用实例。这种方式要考虑线程安全。
饿汉式:系统一运行,就初始化创建实例,当需要时,直接调用即可。这种方式本身就线程安全,没有多线程的线程安全问题。

2、互斥锁

互斥锁是一种特殊的二值性信号量,用于实现对共享资源的独占式处理。在任一时刻,互斥锁的状态只有两种:开锁或闭锁。当有任务(或线程)持有时,互斥锁处于闭锁状态,该任务获得互斥锁的所有权;当任务释放互斥锁时,它变为开锁状态,任务失去所有权。
作用:通过互斥锁,可以确保在任何给定的时间点,只有一个线程能够获得对临界区(即被互斥锁保护的资源区域)资源的访问权,从而避免多个线程同时访问和修改共享资源导致的数据竞争和不一致问题

临界资源:多线程中都能访问到的资源
临界区:每个线程内部,访问临界资源的代码,就叫临界区
1)初始化锁。
iht pthread_mutex_init(pthread_mutex_t *mutex,const pthread_mutexattr_t *attr);

2)阻塞加锁,若互斥锁已经被其它线程上锁,则调用者一直阻塞等待,直到被解锁后才上锁。
int pthread_mutex_lock(pthread_mutex_t *mutex);

3)非阻塞加锁/若互斥锁未加锁,则上锁,若互斥锁已加锁,则函数立即返回失败。
int pthread_mutex_trylock(pthread_mutex_t*mutex);

4)解锁。
int pthread_mutex_unlock(pthread_mutex_t*mutex);

5)销毁锁, 释放资源(锁也是资源)。
int pthread_mutex_destroy(pthread_mutex_t *mutex);
#include<stdio.h>
#include<pthread.h>
#include<string.h>

char buffer[101];
pthread_mutex_t mutex;//声明互斥锁

void*pthfun(void*arg)
{
	for(int i=0;i<3;i++){
		printf("%ld:lock....\n",(long)arg);
		pthread_mutex_lock(&mutex);//加锁
		printf("%ld:lock is ok\n",(long)arg);
		sprintf(buffer,"%ld %d",pthread_self(),i);
		sleep(5);
		pthread_mutex_unlock(&mutex);//解锁
		printf("%ld:unlock....\n",(long)arg);
		usleep(100);
	}
}
int main()
{
	pthread_mutex_init(&mutex,NULL);//初始化锁

	pthread_t pthid1,pthid2;
	pthread_create(&pthid1,NULL,pthfun,(void*)1);
	pthread_create(&pthid1,NULL,pthfun,(void*)2);
	
	pthread_join(pthid1,NULL);
	pthread_join(pthid2,NULL);
	
	pthread_mutex_destroy(&mutex); //销毁锁
	
	return 0;
}

io复用使用多线程服务器

互斥锁实现数据库连接池(或者线程池)

先初始化数据库连接池,每个连接服务器的客户端需要使用数据库,就从连接池里拿一个数据库连接(也拿了锁),每次释放连接时也释放锁。
除此之外,还可以利用事务的特性保证线程安全。

  1. 原子性(Atomic)
    原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。 一个事务包含多个操作,这些操作要么全部执行,要么全都不执行
  2. 隔离性(Isolation)
    并发事务之间互相影响的程度,比如一个事务会不会读取到另一个未提交的事务修改的数据。事务的隔离性

3、条件变量

条件变量用来阻塞一个线程,直到其它的线程通知它条件已满足为止。
条件变量看似简单,与互斥锁同时使用时非常巧妙。生产消费者模型(高速缓存队列)。

1)初始化条件变量
int pthread_cond_init(pthread_cond_t *cond, pthread_condattr_t *cond_attr);

2)阻塞等待
int pthread_cond_wait(pthread_cond_t *cond,pthread_mutex_t *mutex);

3)超时等待
int pthread_cond_timewait(pthread_cond_t *cond,pthread_mutex*mutex, const timespecabstime);

4)唤醒一个等待该条件的线程
int pthread_cond_signal(pthread_cond_t *cond);

5)唤醒全部等待该条件的所有线程
int pthread_cond_broadcast(pthread_cond_t *cond);

6)销毁条件变量
int pthread_cond_destroy(pthread_cond_t *cond);
#include<stdio.h>
#include<pthread.h>
#include<string.h>
#include<unistd.h>
#include<signal.h>

char buffer[101];
pthread_mutex_t mutex;//声明互斥锁
pthread_cond_t cond; //声明条件变量

void*pthfun1(void*arg)
{
	while(1){
		pthread_cond_wait(&cond,&mutex);
		printf("线程1唤醒\n");
	}
}
void*pthfun2(void*arg)
{
	while(1){
		pthread_cond_wait(&cond,&mutex);
		printf("线程2唤醒\n");
	}
}
void func(int sig)
{
	pthread_cond_signal(&cond);
	
	//pthread_cond_broadcast(&cond);
}
int main()
{
	signal(15,func);
	pthread_mutex_init(&mutex,NULL);
	pthread_cond_init(&cond,NULL);
	
	pthread_t pthid1,pthid2;
	pthread_create(&pthid1,NULL,pthfun1,NULL);
	pthread_create(&pthid1,NULL,pthfun2,NULL);
	
	pthread_join(pthid1,NULL);
	pthread_join(pthid2,NULL);
	
	pthread_mutex_destroy(&mutex); //销毁锁
	
	return 0;
}

在这里插入图片描述

条件变量和互斥锁

pthread_cond_wait(&cond,&mutex);发生了这些步骤(释放锁,等条件变量,加锁)

  1. 释放了互斥锁
  2. 等待条件
  3. 条件被触发、 互斥锁加锁 第3步是原子操作
#include<stdio.h>
#include<pthread.h>
#include<string.h>

#include<unistd.h>
#include<signal.h>

char buffer[101];
pthread_mutex_t mutex;//声明互斥锁
pthread_cond_t cond; //声明条件变量

void*pthfun1(void*arg)
{
	while(1){
		pthread_mutex_lock(&mutex);  //加锁
		printf("线程1开始等待条件\n");
		pthread_cond_wait(&cond,&mutex);
		printf("线程1唤醒\n");
		pthread_mutex_unlock(&mutex);
	}
}
void*pthfun2(void*arg)
{
	while(1){
		pthread_mutex_lock(&mutex);
		printf("线程2开始等待条件\n");
		pthread_cond_wait(&cond,&mutex);
		printf("线程2唤醒\n");
		pthread_mutex_unlock(&mutex);
	}
}
void func(int sig)
{
	pthread_cond_signal(&cond);
	
	//pthread_cond_broadcast(&cond);
}
int main()
{
	signal(15,func);
	pthread_mutex_init(&mutex,NULL);
	pthread_cond_init(&cond,NULL);
	
	pthread_t pthid1,pthid2;
	pthread_create(&pthid1,NULL,pthfun1,NULL);
	pthread_create(&pthid1,NULL,pthfun2,NULL);
	
	pthread_join(pthid1,NULL);
	pthread_join(pthid2,NULL);
	
	pthread_mutex_destroy(&mutex); //销毁锁
	
	return 0;
}

在这里插入图片描述

实现高速缓存

4、信号量

信号量是一个整数计数器,其数值可以用于表示空闲临界资源的数量。
当有进程释放资源时,信号量增加,表示可用资源数增加;当有进程申请到资源时,信号量减少,表示可用资源数减少。

1)初始化信号量。   
int sem_init(sem_t*sem, int pshared,unsigned int value);
pshared :指定信号量的作用域。其值可以是 0 或非 0(通常是 1)。如果 pshared 的值为 0,则表示信号量仅在同一进程的线程之间共享。即,它用于
线程间的同步。如果 pshared 的值为非 0(通常是 1),则表示信号量可以在多个进程之间共享。但是,需要注意的是,要使得信号量在多个进程间共
享,可能需要将其放置在一个由这些进程共享的内存区域中(如通过 mmap 创建的映射区域或使用 shmget 创建的共享内存段)
value:指定了信号量的初始值。信号量的值表示可用资源的数量

2)等待信号量,如果信号量的值为0则等待,如果信号量大于0则返回,同时对值做减1操作。
int sem_wait(sem_t*sem);
int sem_trywait(sem_t*sem);
int sem_timedwait(sem_t *sem, const struct timespec *abs_timeout);

3)释放信号量,信号量加1操作。
int sem post(sem_t *sem);

4)获取信号量的值。
int sem_getvalue(sem_t *sem, int *sval);

5)销毁信号量,释放资源。
int sem_destroy(sem_t *sem);
【图像去噪】基础知识之加噪 | 给图像加噪的若干种方式,包括加高斯白噪声(AWGN)、泊松-高斯噪声、模拟真实噪声(SIDD、DND)等 本文介绍给干净图像加噪的若干种方式,新手入门必看!。根据noise类型不同,产生不同的Noisy,Noisy一般是模型输入。【图像去噪】基础知识之图像流 | 图像从输入到输出的前世今生,包括类型变化、维度变化、数值变化等。 阅读详情

相关推荐

Android开发者必看:5分钟搞定MQTT客户端连接EMQX服务器(附完整代码)

本文为Android开发者提供了一份快速实现MQTT客户端连接EMQX服务器的实战指南。通过引入Eclipse Paho SDK,详细讲解了从项目配置、权限申请到核心连接、主题订阅与消息发布的完整流程,并附有即拿即用的Kotlin代码,帮助开发者在物联网应用中高效集成轻量级实时通信功能。

weixin_29228781的博客 270

多线程_同步的特点及好处和弊端

package cn.itcast_10; /* * 举例: * 火车上厕所。 * 一节车箱里面的所有人(多线程),1号座位去上厕所(共享资源)门(synchronized)关上了,其它人进不去了。 * * 同步的特点: * 前提: * 多线程。 * 解决问题的时候要注意: * 多个线程使用的是同一个锁对象。 * 同步的好处: * 同

辐_射的博客 2245

Cocos Creator3.5.2使用Spine切换皮肤

3、然后获取当前spine中是否有皮肤数据,如果spine连皮肤数据都没有,接着写可能会error,这里的 skins[skin],是判断皮肤列表中是否有需要更换的皮肤。2、因为spine往往意味着异步加载,换肤时也经常出现频繁异步的情况,所以下一步我们要可以判断当前spine组件里是否已经加载好了spine文件。换肤前隐藏好需要换肤的节点,避免穿帮;官网文档的换肤流程太简化,对于实际使用来说会有各种各样的问题。1、首先获取对应的spine组件。这里的skin自然是外部传入的需要换肤的皮肤名。

tc654321的博客 1817

多线程学习笔记04线程同步

javascript是前端必要掌握的真正算得上是编程语言的语言,学会灵活运用javascript,将对以后学习工作有非常大的帮助。掌握它最重要的首先是学习好基础知识,而后通过不断的实战来提升我们的编程技巧和逻辑思维。这一块学习是持续的,直到我们真正掌握它并且能够灵活运用它。如果最开始学习一两遍之后,发现暂时没有提升的空间,我们可以暂时放一放。继续下面的学习,javascript贯穿我们前端工作中,在之后的学习实现里也会遇到和锻炼到。真正学习起来并不难理解,关键是灵活运用。

2401_83329718的博客 607

高效利用ChEMBL数据库:从靶点查询到活性数据处理的完整指南

本文提供了高效利用ChEMBL数据库的完整指南,从靶点查询到活性数据处理。详细介绍了靶点精准定位、高级过滤技巧、数据导出优化以及活性数据清洗、特征工程和可视化等实战技巧,帮助药物研发人员快速获取和处理生物活性数据,提升工作效率。

weixin_29278805的博客 791

HID设备开发避坑指南:如何利用Windows内置驱动快速实现USB键盘模拟

本文详细解析了HID设备开发中的免驱方案与USB键盘模拟技术,重点介绍了HID协议的核心优势、开发基础架构及Windows平台的实现方法。通过实战案例和代码示例,帮助开发者快速掌握USB键盘模拟技术,避免常见开发陷阱,提升设备兼容性和性能。

lambda的博客 682

嵌入式学习之线程和同步互斥机制

线程是进程中的执行路径,允许多个线程共享进程资源,从而实现并发执行。信号量(Semaphore)是一种用于控制共享资源访问的同步机制,适合用于限制资源访问的数量。条件变量(Condition Variable)与互斥锁结合使用,用于等待和通知特定条件的变化,适用于复杂的线程同步场景。信号量用于计数和控制资源访问,而条件变量用于等待条件变化。线程同步机制(如互斥锁、条件变量)确保多个线程安全访问共享资源,避免竞态条件。

m0_51830537的博客 1241

SC8F073单片机串口通信保姆级教程:从寄存器配置到完整收发Demo(附避坑指南)

本文详细解析了SC8F073单片机串口通信的寄存器配置与调试技巧,涵盖TXSTA、RCSTA和SPBRG寄存器的逐位设置,提供精确的波特率计算方法和工业级抗干扰策略。通过完整的收发Demo和避坑指南,帮助开发者快速掌握底层串口通信技术,适用于工业控制等严苛环境。

weixin_33724046的博客 484

muduo库学习之线程同步08——总结

东阳的学习笔记 1. 内容总结 前面几篇文章的内容归纳如下: 线程同步的四项原则,尽量使用高层同步设施(线程池、队列、倒计时) 使用普通互斥器和条件变量完成剩余的同步任务,采用 RAII惯用手法和 Scoped Locking。 所谓的四项原则即: muduo库学习之线程同步01——互斥器mutex中所提到的使用原则 2. 文章汇总 muduo库学习之线程同步01——互斥器mutex muduo库学习之线程同步02——条件变量 muduo库学习之线程同步03——不要用读写锁和信号量 muduo库.

qq_22473333的博客 168

微机原理与接口技术第六版周荷琴课后习题答案及解析(期末重点)

第二章 1.8086/8088CPU可直接寻址多少个内存(字节)单元?多少个I/O端口?它们的外部数据总线各有多少根? 8086/8088CPU使用的是20位地址总线,因此可以直接寻址2的20次方个内存单元(即1,048,576),每个单元大小为1字节,因此可以直接寻址2的20次方个字节的内存。 8086/8088CPU有64K个I/O端口,每个端口占用1字节的地址空间,因此可以直接寻址6...

Wmicheng的博客 1万+

iOS安全和逆向系列教程 第18篇:iOS应用脱壳技术详解与实战

iOS应用脱壳技术详解与实战 摘要: 本文深入剖析了iOS应用脱壳技术,首先解释了加壳(如FairPlay DRM)与脱壳的基本概念及必要性。通过otool命令可以检测应用的加密状态。文章详细介绍了三种主流脱壳工具:经典dumpdecrypted工具的使用方法、现代化Clutch工具的安装配置以及基于Frida的高级脱壳方案frida-ios-dump。针对特殊情况,还提供了使用LLDB手动dump内存的技术细节,包括查找基地址、计算dump范围和内存读取等操作。最后介绍了修复Mach-O文件头的Pytho

一个自学不成材的程序员 710

学习线程同步的总结

线程的同步 线程同步的作用:        实现线程间的有机交互、并确保共享资源在某些关键时段只能被一个线程访问。        避免线程的安全隐患。 互斥锁: 每个对象都对应于一个可称为“互斥锁”的标记,这个标记用来保证在任一时刻,只能有一个线程访问该对象。 Java对象默认是可以被多个线程共用的,只是在需要时才启动“互斥锁”机制,成为专用对象。 关键字synchronized用来

bgn123的专栏 381

ABAP RANGES及比较符号

RANGES *选项介绍: *1.SIGN 值为 I 和 E 。 I是包含, E是排除, 一般使用I。 2.OPTION 如果HIGH 为空 ,为单值选择 。有 EQ、NE、GT、LE、LT等逻辑操作 对于的 CP包含 NP是排除 如果HIGH 不为空 为区间选择 有BT,NB可选 *3.LOW 低值 *4.HIGH 高值 lt:less than 小于 le:less than or equal to 小于等于 eq:equal to 等于 ne:

Pegasus666的博客 5388

Java 多线程学习总结:Thread、Runnable 与线程同步实战

因此,在《Java 程序设计(2)》课程中,我们进行了 多线程专项实验,通过代码实践来理解线程的创建、执行以及同步问题。System.out.println("最终余额:" + acc.getBalance());System.out.println("主线程:" + i);System.out.println("子线程:" + i);System.out.println("主线程:" + i);System.out.println("子线程:" + i);// 主线程让步,等待 t 执行完。

2402_82812365的博客 891

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

线程互斥与同步的学习

独立的上下文:有独立的PCB+TCP(用户层,pthread库内部)独立的栈:每个线程都有自己的栈,要么是进程自己的,要么是库中创建进程时mmap申请出来的线程是共享地址空间的 线程会共享大部分资源 这部分资源也就是公共资源 有公共的资源就会有各种情况数据不一致问题 解决这些问题:同步和互斥。

zx_zx_123的博客 1013

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

坚持学习100天:线程同步对象

前言 Hello,我是修齊。 学习C++的第一百零二十五天,用心学习。 在这里记录一些学习的东西和学习的心情,内容主要是一些自己学习整理的小笔记。 一、临界区 1.临界区的意思是一段关键代码,执行代码相当于进入临界区。 2.执行临界区代码,要独占临界区对象。 3.操作临界区对象的函数: InitialzeCriticalSetion函数,初始化一个临界区对象,声明: void InitializeCriticalSection(LPCRITICAL_SECTION lpCriticalSection);

m0_55732114的博客 133

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Java多线程学习之线程同步

1、线程同步 (1)由于同一进程的多个线程共享同一块存储空间,在带来方便的同时,也带来了访问冲突问题,为了保证数据在方法中被访问时的正确性,在访问时加入锁机制synchronized。 (2)当一个线程获得对象的排它锁(又称为写锁((eXclusive lock,简记为X锁)),若事务T对数据对象A加上X锁,则只允许T读取和修改A,其它任何事务都不能再对A加任何类型的锁,直到T释放A上的锁。它防止任何其它事务获取资源上的锁,直到在事务的末尾将资源上的原始锁释放为止。),独占资源,其他线程必须等待,使用后

shexianyu的博客 202

Linux学习八(线程同步)

try_lock_for(const std::chrono::duration<Rep, Period>& rel_time):尝试对互斥量进行加锁操作,如果当前互斥量已经被其他线程持有,则当前线程会被阻塞,直到互斥量被成功加锁,或者超过了指定的时间。等待阻塞,阻塞的过程中需要一个互斥锁参数,互斥锁让线程进入临界区,避免数据混乱。

cliu1_16的博客 973

C++学习之线程同步

C++学习之线程同步

qq_27302885的博客 902

嵌入式学习DAY28 --- 线程、同步和互斥问题、如何实现同步和互斥?_嵌入式操作系统多线程的同步

并发编程中,多线程/进程 共享的资源,都叫临界资源代码中操作临界资源的部分,称为临界区多进程/多线程在访问临界资源时,按照一定的操作顺序来访问。多线程/多进程访问临界资源时,没有顺序要求,只需要满足写写互斥和读写互斥时,此时说的就是不能同时访问临界资源。

2401_85015025的博客 1167

【Linux学习】线程互斥与同步

线程互斥,临界资源,互斥锁,死锁问题,避免死锁,多线程编程,临界线程互斥是一种同步机制,用于控制对共享资源的访问,以确保在任意给定的时刻只有一个线程可以访问该资源。在多线程编程中,当多个线程同时竞争访问某个共享资源时,如果没有适当的同步机制,可能会导致竞争条件和数据不一致性的问题。线程互斥通过引入互斥锁等机制,使得在任意时刻只能有一个线程持有资源的访问权限,从而避免了竞争条件和数据不一致性的发生。进程线程间的互斥相关背景概念多线程执行流共享的资源叫做临界资源。每个线程内部,访问临界资源的代码,就叫做临界区。

Chris在Coding的博客 1457

Linux第八次学习 线程和线程同步

是轻量级的进程,在Linux环境下线程的本质仍是进程。为了让进程完成一定的工作,进程必须至少包含一个线程。线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源,但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。进程有自己的地址空间,线程使用进程的地址空间,也就是说,进程里的资源,线程都是有权访问的,比如堆、栈和静态存储区。进程是操作系统分配资源的最小单位,线程是操作系统调度的最小单位。

Breather2019的博客 713

线程同步之同步中问题 学习总结

————— 线程同步的几种技术 —————— 一、原子锁 ATOM 二、临界区 CriticalSection 临界区 可以保证线程同步 { 以下是伪代码: 在做个之前要引入Windows 单元 ,这是Delphi封装Windows下 VC++ 所有API } CreateCriticalSection CS; InitCriticalSection(CS); {...

aikcsu4084的博客 133

学习线程同步

wait()、notify()、notifyAll()都是Object中的final方法,被所有的类继承并不能重写,wait()、notify()与同步代码、同步方法一起出现(synchronized),否则会抛出异常。notify():调用任意对象的notify()方法会在因调用该对象的wait()方法而阻塞的线程中随机选择一个线程解除阻塞,但要等到获得锁后才可以真正执行。同步代码块:在同步代码块中,你可以选择精确控制哪部分代码需要同步,只有被包裹在同步块内的代码会受到同步锁的保护。

m0_70054514的博客 82

线程同步的学习与应用

运行结果出错!!!而wg++不是一个原子操作;这种情况也不是每一次都发生,也不是一定发生了多少次.这种情况就是最可怕的,给人的感觉是时对时错;注意,只有一个处理器的时候这种情况出现的概率是非常小的,同一时刻只有一个线程在运行,不容易出现两个线程同时去获取i的值的情况,但是也会发生;

Einsteinznm的博客 853

【Java并发学习】之线程的同步

【Java并发学习】之线程的同步前言在前面一个小节中,我们学习了线程的概念以及在Java中创建任务的方式,并且将任务委托给对应的线程进行执行,本小节我们主要来学习线程之间的关系之一的同步,包含临界区、临界资源、线程同步的两种主要方法线程的关系从广义上来讲,线程之间有三种关系 没有关系:多个线程之间相互独立,既不竞争资源,也没有任何的合作关系,只是各自完成自己的任务 竞争关系:两个及以上的线程之间存在

曾经沧海难为水,除却巫山不是云 288
上一篇: 多进程比多线程开销大的原因
下一篇: C++基础回顾
Geek之路
博客等级 码龄7年 725粉丝 64原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值