C语言实现原子锁(二)

我常常在小吃店满足。,能本人做饭的人。,铺子里有很多服侍职掌完成。。公正的鉴于过路人分开了座位吃饭。,使托盘误了菜。。因而每回我去吃饭,他们把玻璃杯放在盘子侧面的。,我必要持续吃饭。,你不克不及拿走我的餐具。_

[ TOC ]

锁定同步的机制

上面的判例实际的是计算者达到目标锁的无论哪一个人地租的判例。。模块A和模块B必要在必然的工夫内管理履历C。,过后他们霉臭以右边的方式管理C。,确保C不能胜任的出错。;喂的A模块相当于菜馆里的过路人。,B模块可以算是托盘。,履历C相当于要清算的餐具。。确保盘子不能胜任的失败。,笔者必要一种机制。同步的机制D,镜片贮存的行为,使过路人和托盘右边运用盘子。,这是右边的管理履历C[1]
同步的机制这是计算者培养达到目标无论哪一个人向某人点头或摇头示意。笔者称之为锁,它可以是这样同步的机制的另无论哪一个人清晰度。,它也可以是实现预期的结果同步的机制的实质清晰度。,拿 … 来说,读写锁和排成一行行走锁。。而且这些锁完毕实质,协同的投票反对。,发信号,发打旗语,该机制可以经过描画符IO来实现预期的结果。。喂的向某人点头或摇头示意短工夫杂乱。,我不太精通。,请更多地认识实质和向某人点头或摇头示意的规定。,喂锁 两个规定,就像价钱为和价钱相等地。

锁的实质

锁定是同步的机制的实现预期的结果。,其实质是房地产机。,除非房地产机才干在右边的房地产下管理履历。,不同的可使用。。上面用笔者要实现预期的结果的原子锁模仿上锁与解锁的列队行进。模块A和模块B同时管理履历C。,并运用原子锁D举行同步的,设原子锁的房地产机未锁定房地产为0,锁定房地产为1。,初始房地产为0。,补助金和谐是模块A,则管理履历C的盘问在。相对的管理的挨次鄙人表中表现。[2]

时序 模块A管理 模块B管理 原子锁D房地产 履历C属于
开端 nil nil 0 nil
无论哪一个人偏爱的事物的B来使转动D的房地产。 (1)
/*it will run this code
and then break loop*/
if() D.stat = 1;
if () break;
}
do other something turn stat from 0 to 1 Critical state
C管理,B可使用A重新安放或安置D。 do something to data C (1)
/*it will always in loop
until D''s stat turn from 1 to 0*/
if() D.stat = 1;
if () break;
}
1 model A
重新安放或安置D房地产,B将加入传送。 D.stat = 0 (1)/*it will break loop*/} turn stat from 1 to 0 Critical state
使转动D房地产 do other something if() D.stat = 1 turn stat from 0 to 1 Critical state
B管理 do other something do something to data C 1 model B
B重新安放或安置D房地产 do other something D.stat = 0 turn stat from 1 to 0 Critical state
完毕 nil nil 0 nil

  模块AB为了使安全的管理履历C大都会先使转动原子锁D的房地产,免得D的房地产不满要价,请可使用健康状况PIM。,在成地使转动D房地产继后,管理履历C,重新安放或安置管理前的D房地产。,在列队行进完毕时。模块AB是无论哪一个人由列队行进S协同忍受的同步的机制。,锁是实现预期的结果这一机制的颜料溶解液。。当无论哪一个模块管理履历时,,除非每人大都会控制这样同步的机制。,履历不能胜任的挫败。,不同的,履历将呈现。同次性犯罪。拿 … 来说,它是菜馆吃晚饭的比拟。,免得我用镜片鼓励侍者,不要拿走我的餐具。,但他对此擤鼻声。,他依然可以拿走我的餐具。,我与这件事情无干。。

为什么会发作同步的?

材料原因是必要同时管理履历。。你可以从吃饭的成绩中看出。,免得托盘关门,我去吃饭,那不能胜任的同时发作。,搜集餐具不能胜任的不公正。,自然,不要压倒托盘,鉴于他不愉快SA。,在过路人从前成心被征用的餐具。。免得它责备无论哪一个人多线索顺序,他们达到目标质量不必要同步的机制。,但它否定压倒发信号阻止也会使遭受同步的。,而且无论哪一个人协作机制。,轻蔑的拒绝或不承认他责备同时管理的相对规定。,上面的文字将逐个地阐明这些机遇。。

离子交换漏过点

当管理员开端更改履历工夫点时,执意离子交换漏过点。免得在这点上有多个管理符来管理履历,这可能性使遭受履历同次性犯罪。,像这样,这样零点是被保卫的枢要点。。餐厅成绩,我留在后面做午饭。,托盘霉臭把盘子拿走。,当他做出这样举措时,他发生了零边界附近的点。,免得他公正的自己去看一看。,这样举措不算数。,鉴于他对我的进餐没感染。。

爱挑剔的区

无论哪一个枢要区域都可能性是枢要区域。,锁必要保卫相对的枢要区域。。鉴于托盘正餐厅里走来走去。,免得他一下子看到无论哪一个人地区曾经一团糟。,没过路人,也没微量。,因而在过路人分开使寄宿在前,侍者的发现一直到,他可能性来拾掇餐具。,因而当我分开,贮存镜片作为鼓励。,直到我再次回到座位上。。这一时间是无论哪一个人枢要管辖范围。,这次笔者必要锁起来保卫。,而责备撢去。

总结

  1. 同步的机制是为了保卫履历同次性。。
  2. 总的来说,锁定指的是采取同步的机械。,锁是向某人点头或摇头示意性的。。
  3. 通常,锁是一种履历结构实质。,它同样实现预期的结果同步的机制的一种颜料溶解液。,但责备可是的方式。。
  4. 鉴于离子交换漏过点和爱挑剔的区,同步的机制,免得多个管理符不修正履历,过后不要同步的。。

  1. 喂的吃晚饭成绩和同步的机制向某人点头或摇头示意上是逻辑的。,但它不克不及用作锁。。 ↩

  2. 喂的形状公正的为了简略的阐明。,它不表现原子管理和真正的实现预期的结果。。
    [原子管理]

发表评论

电子邮件地址不会被公开。 必填项已用*标注