同步概念同步是指系统中发生的事件相互协调,在时间上一致、统一的现象。但是,对于不同的行业,对同步的理解略有不同。例如:设备同步是指指定两个设备之间的共同时间参考;数据库同步是指使两个或多个数据库的内容保持一致,或者根据需要保持部分一致;一个或多个文件夹中的文件等。但是,软件编程或通信行业中的同步概念与生活中每个人印象中的同步概念略有不同。“同”字应指协调、协助、相互配合。主要目的是协调,按照预定的顺序运行。请注意,这是指按预定顺序执行,而不是同时执行。线程同步线程同步是指当一个线程发出函数调用时,直到得到结果后调用才返回。同时,其他线程也不能调用这个函数来保证数据的一致性。例:在内存中开辟了100字节的空间。现在,线程T1要全1,线程T2要全0。但是如果T1在全1填充50个字节后就失去了cpu,轮到T2执行,T2会从头开始在内存中全0填充,然后覆盖掉T1写入的内容。T2时间片用完后,T1重新获得cpu,从丢失cpu的位置继续向后写1。当它执行完后,内存中的100个字节既不全为1,也不全为0,如下图:这种现象称为“时间相关错误”。为了避免这种数据混乱,线程需要同步。“同步”的目的是为了避免数据混乱和解决与时间相关的错误。事实上,不仅线程之间需要同步,进程之间、信号之间等也需要同步机制。因此,所有“多个控制流在共享资源上一起运行”的情况都需要同步。从上面的分析可以看出,造成数据混乱的原因有以下三个:资源共享(不是独占资源)。随机调度(意味着数据访问的竞争)和线程之间缺乏必要的同步机制。那么如何避免这种数据混乱呢?我们可以从数据混乱的三个原因入手。以上三点中,前两点我们不能改变。因为在Linux系统中,为了提高效率和传输数据,必须共享资源。只要资源共享,就必然存在竞争。只要有竞争,数据就很容易变得混乱。所以只能从第三点来解决。为了避免数据混乱,多个线程在访问共享资源时应该互斥。也就是说,当一个进程访问共享资源时,其他进程不能访问该资源,直到该进程放弃该资源。在Linux环境下,有信号量、互斥量、条件变量等来实现线程间的同步。在后续的博文中,将依次介绍这些内容。更多精彩内容,关注公众号良旭Linux,在公众号回复1024免费领取5T技术资料,包括:Linux、C/C++、Python、树莓派、嵌入式、Java、人工智能等。公众号回复加群,邀你加入达人如云技术交流群。最后,最近有很多朋友找我要一份Linux学习路线图,所以我结合自己的经验,利用业余时间熬夜一个月,整理了一本电子书。无论你是面试还是自我提升,相信都会对你有所帮助!免费送给大家,只求大家给我点个赞!电子书|LinuxDevelopmentLearningRoadmap也希望有小伙伴可以加入我的行列,把这本电子书做得更加完美!获得?希望老铁们来个三连击,让更多人看到这篇文章。推荐阅读:干货|程序员和高级架构师免费发送工件的必备资源|支持搜索的资源网站
