关于linux:Linux系统编程-线程同步概念

9次阅读

共计 1282 个字符,预计需要花费 4 分钟才能阅读完成。

同步概念

同步,指对在一个零碎中所产生的事件之间进行协调,在工夫上呈现一致性与统一化的景象。

然而,对于不同行业,对于同步的了解略有不同。比方:设施同步,是指在两个设施之间规定一个独特的工夫参考;数据库同步,是指让两个或多个数据库内容保持一致,或者按须要局部保持一致;文件同步,是指让两个或多个文件夹里的文件保持一致,等等。

然而,在软件编程或者通信行业中所说的同步与生存中大家印象中的同步概念略有差别。“同”字应是指协同、帮助、互相配合。宗旨在 协同步调,按预约的先后秩序运行。留神,这里是指依照预约秩序执行,而不是同时执行。

线程同步

线程同步,指一个线程收回某一性能调用时,在没有失去后果之前,该调用不返回。同时其它线程为保证数据一致性,不能调用该性能。

例子:内存中开拓了 100 字节的空间,当初,线程 T1 欲填入全 1,线程 T2 欲填入全 0。但如果 T1 执行了填充 50 个字节全 1 后失去 cpu,轮到 T2 执行,T2 将从头开始在内存里填充全 0,那么他将会将 T1 写过的内容笼罩。当 T2 工夫片应用结束之后,T1 再次取得 cpu 持续从失去 cpu 的地位向后写入 1,当他执行完结后,内存中的 100 字节,既不是全 1,也不是全 0,如下图示:

产生的这种景象叫做“与工夫无关的谬误”(time related)。为了防止这种数据凌乱,线程须要进行同步。

“同步”的目标,是为了防止数据凌乱,解决与工夫无关的谬误。实际上,不仅线程间须要同步,过程间、信号间等等都须要同步机制。

因而,所有“多个控制流,独特操作一个共享资源”的状况,都须要同步。

由以上剖析可知,造成数据凌乱起因有以下三个:

  1. 资源共享(独享资源则不会)
    . 调度随机(意味着数据拜访会呈现竞争)
  2. 线程间不足必要的同步机制。

那如何防止这种数据凌乱的状况呢?咱们能够从造成数据凌乱的三个起因动手。

以上 3 点中,前两点咱们是无奈扭转的。因为在 linux 零碎中,想要提高效率,传递数据,资源必须共享。只有共享资源,就肯定会呈现竞争。只有存在竞争关系,数据就很容易呈现凌乱。

所以只能从第三点着手解决。为了防止数据凌乱,应该使多个线程在访问共享资源的时候,呈现互斥。也就是说,当某个过程访问共享资源时,其它过程就无奈该资源,直到该过程放弃这个资源。在 linux 环境下,有 信号量、互斥量、条件变量 等形式实现线程间同步。在后续的博文中,将顺次介绍这些内容。

更多精彩内容,请关注公众号 良许 Linux,公众内回复 1024 可收费取得 5T 技术材料,包含:Linux,C/C++,Python,树莓派,嵌入式,Java,人工智能 ,等等。公众号内回复 进群,邀请您进高手如云技术交换群。


最初,最近很多小伙伴找我要Linux 学习路线图,于是我依据本人的教训,利用业余时间熬夜肝了一个月,整顿了一份电子书。无论你是面试还是自我晋升,置信都会对你有帮忙!

收费送给大家,只求大家金指给我点个赞!

电子书 | Linux 开发学习路线图

也心愿有小伙伴能退出我,把这份电子书做得更完满!

有播种?心愿老铁们来个三连击,给更多的人看到这篇文章

举荐浏览:

  • 干货 | 程序员进阶架构师必备资源免费送
  • 神器 | 反对搜寻的资源网站
正文完
 0