关于并发的一个简单的例子
考虑以下程序:
void echo() {
chin = getchar();
chout = chin;
putchar(chout);
}
此过程显示了将提供字符回显过程的程序的基本元素;输入是从键盘上一次按一个键获得的。每个输入字符都存储进chin变量里。然后,字符被传输到变量chout并发送到显示器。任何程序都可以调用此过程来接受用户输入并将其显示在用户屏幕上。
现在考虑一下,我们有一个支持单个用户的单处理器多道程序系统。用户可以从一个应用程序跳到另一个,每个应用程序使用相同的键盘进行输入,使用相同的屏幕进行输出。因为每个应用程序都需要使用过程echo,所以将其作为加载到所有应用程序全局内存部分的共享过程是有意义的。因此,只使用回显过程的单个副本,从而节省了空间。
进程之间共享主内存有助于实现进程之间的有效和密切的交互。然而,这种共享可能会导致问题。考虑以下顺序:
1.进程P1调用echo过程,并且在getchar返回其值并将其存储进chin之后立即被中断。此时,最近输入的字符x存储在变量chin中。
2.进程P2被激活并调用echo过程,该过程运行到结束,输入并在屏幕上显示单个字符y。
3.恢复处理P1。此时,值x已在chin中被覆盖,因此丢失。取而代之是chin含有字符y,它被转移到chout并显示出来。
因此,第一个字符丢失,而第二个字符显示了2次。这个问题的本质是共同的全局变量chin。多个进程可以访问此变量。如果一个进程更新了全局变量,然后被中断,那么在第一个进程可以使用其值之前,另一个进程可能会更改该变量。但是,假设我们一次只允许一个进程在该过程中。则上述顺序将导致以下结果:
1.进程P1调用echo过程,并且在输入函数结束之后立即被中断。此时,最近输入的字符x存储在变量chin里。
2.进程P2被激活并调用echo过程。然而,由于P1仍在回显过程中,尽管当前已暂停,但P2被阻止进入该过程。因此,P2被暂停,等待echo程序的可用性。
3.在稍后的某个时间,进程P1被恢复并完成echo的执行。将显示正确的字符x。
4.当P1退出echo时,这将移除P2上的阻止。当P2随后恢复时,将成功调用echo过程。
这个例子表明,保护共享的全局变量(和其他共享的全局资源)是必要的,唯一的方法是控制访问变量的代码。如果我们强加一个纪律,即一次只能有一个进程进入echo,并且一旦进入echo程序必须运行到完成,才能用于另一个进程,那么就不会发生刚才讨论的错误类型。如何实施这种纪律是讨论主要主题。
这个问题是在假设存在单处理器、多程序操作系统的情况下提出的。这个例子表明,即使只有一个处理器,也会出现并发问题。在多处理器系统中,受保护的共享数据源也会出现同样的问题,并且同样的解决方案也能起作用。首先,假设没有用于控制对共享全局变量的访问的机制:
1.进程P1和P2都在执行,每个进程都在一个单独的处理器上。两个进程都调用echo过程。
2.发生以下事件;同一行上的事件并行发生如图所示:
结果是,输入到P1的字符在显示之前丢失,并且输入到P2的字符由P1和P2显示。再次,让我们增加执行纪律的能力,即一次只能有一个进程在echo。然后出现以下序列:
1.进程P1和P2都在执行,每个进程都在一个单独的处理器上。P1调用echo过程。
2.当P1在echo过程中时,P2调用echo。由于P1仍在echo程序中(无论P1发出还是执行),P2被阻止进入该过程。因此,P2被暂停,等待echo程序的可用性。
3.稍后,进程P1完成echo的执行,退出该过程,并继续执行。P1从echo中退出后,P2立即恢复并开始执行echo。
在单处理器系统的情况下,我们遇到问题的原因是中断可以停止进程中任何位置的指令执行。在多处理器系统的情况下,我们有相同的条件,此外,可能会导致问题,因为两个进程可能同时执行,并且都试图访问相同的全局变量。然而,这两类问题的解决方案是相同的:控制对共享资源的访问。
考虑以下程序:
void echo() {
chin = getchar();
chout = chin;
putchar(chout);
}
此过程显示了将提供字符回显过程的程序的基本元素;输入是从键盘上一次按一个键获得的。每个输入字符都存储进chin变量里。然后,字符被传输到变量chout并发送到显示器。任何程序都可以调用此过程来接受用户输入并将其显示在用户屏幕上。
现在考虑一下,我们有一个支持单个用户的单处理器多道程序系统。用户可以从一个应用程序跳到另一个,每个应用程序使用相同的键盘进行输入,使用相同的屏幕进行输出。因为每个应用程序都需要使用过程echo,所以将其作为加载到所有应用程序全局内存部分的共享过程是有意义的。因此,只使用回显过程的单个副本,从而节省了空间。
进程之间共享主内存有助于实现进程之间的有效和密切的交互。然而,这种共享可能会导致问题。考虑以下顺序:
1.进程P1调用echo过程,并且在getchar返回其值并将其存储进chin之后立即被中断。此时,最近输入的字符x存储在变量chin中。
2.进程P2被激活并调用echo过程,该过程运行到结束,输入并在屏幕上显示单个字符y。
3.恢复处理P1。此时,值x已在chin中被覆盖,因此丢失。取而代之是chin含有字符y,它被转移到chout并显示出来。
因此,第一个字符丢失,而第二个字符显示了2次。这个问题的本质是共同的全局变量chin。多个进程可以访问此变量。如果一个进程更新了全局变量,然后被中断,那么在第一个进程可以使用其值之前,另一个进程可能会更改该变量。但是,假设我们一次只允许一个进程在该过程中。则上述顺序将导致以下结果:
1.进程P1调用echo过程,并且在输入函数结束之后立即被中断。此时,最近输入的字符x存储在变量chin里。
2.进程P2被激活并调用echo过程。然而,由于P1仍在回显过程中,尽管当前已暂停,但P2被阻止进入该过程。因此,P2被暂停,等待echo程序的可用性。
3.在稍后的某个时间,进程P1被恢复并完成echo的执行。将显示正确的字符x。
4.当P1退出echo时,这将移除P2上的阻止。当P2随后恢复时,将成功调用echo过程。
这个例子表明,保护共享的全局变量(和其他共享的全局资源)是必要的,唯一的方法是控制访问变量的代码。如果我们强加一个纪律,即一次只能有一个进程进入echo,并且一旦进入echo程序必须运行到完成,才能用于另一个进程,那么就不会发生刚才讨论的错误类型。如何实施这种纪律是讨论主要主题。
这个问题是在假设存在单处理器、多程序操作系统的情况下提出的。这个例子表明,即使只有一个处理器,也会出现并发问题。在多处理器系统中,受保护的共享数据源也会出现同样的问题,并且同样的解决方案也能起作用。首先,假设没有用于控制对共享全局变量的访问的机制:
1.进程P1和P2都在执行,每个进程都在一个单独的处理器上。两个进程都调用echo过程。
2.发生以下事件;同一行上的事件并行发生如图所示:
结果是,输入到P1的字符在显示之前丢失,并且输入到P2的字符由P1和P2显示。再次,让我们增加执行纪律的能力,即一次只能有一个进程在echo。然后出现以下序列:
1.进程P1和P2都在执行,每个进程都在一个单独的处理器上。P1调用echo过程。
2.当P1在echo过程中时,P2调用echo。由于P1仍在echo程序中(无论P1发出还是执行),P2被阻止进入该过程。因此,P2被暂停,等待echo程序的可用性。
3.稍后,进程P1完成echo的执行,退出该过程,并继续执行。P1从echo中退出后,P2立即恢复并开始执行echo。
在单处理器系统的情况下,我们遇到问题的原因是中断可以停止进程中任何位置的指令执行。在多处理器系统的情况下,我们有相同的条件,此外,可能会导致问题,因为两个进程可能同时执行,并且都试图访问相同的全局变量。然而,这两类问题的解决方案是相同的:控制对共享资源的访问。
餅餅0524生日快樂
一年一度舉宇宙歡慶的日子又來了
為了慶祝餅餅生日
準備了一些小周邊送給大師傅們
謝謝餅餅一直以來的陪伴
獎品如下:
一獎:明信片+票卡夾+環保杯套-1位
二獎:票卡夾+環保杯套-5位
三獎:環保杯套-5位
抽獎條件如下:
1.關注@Echo是一种饼
2.關注#黑芝烧[超话]#
3.購買五部餅餅參與的廣播劇
(主/協役皆可,同部不同季只算一部)
4.評論寫下對餅餅的生日祝福
*運費請自付
*請於5天內主動私信提供截圖及填寫寄件資訊
*不抽黑粉(會看主頁)
*一切解釋權歸胡蘿北所有 https://t.cn/A6ph0BTT
一年一度舉宇宙歡慶的日子又來了
為了慶祝餅餅生日
準備了一些小周邊送給大師傅們
謝謝餅餅一直以來的陪伴
獎品如下:
一獎:明信片+票卡夾+環保杯套-1位
二獎:票卡夾+環保杯套-5位
三獎:環保杯套-5位
抽獎條件如下:
1.關注@Echo是一种饼
2.關注#黑芝烧[超话]#
3.購買五部餅餅參與的廣播劇
(主/協役皆可,同部不同季只算一部)
4.評論寫下對餅餅的生日祝福
*運費請自付
*請於5天內主動私信提供截圖及填寫寄件資訊
*不抽黑粉(會看主頁)
*一切解釋權歸胡蘿北所有 https://t.cn/A6ph0BTT
#张泽[超话]#
✨@ 張泽Echo✨
✨²⁰²³/₅.₃₀ ℋ ℬℎ✨
✨场快乐ᥫᩣ✨
个人应援——物料发放
◤歌词串连回忆,角色定义永恒◢
选取泽泽目前13部剧中的歌词(台词),通过歌词接龙的方式进行串连,是会不自觉唱出来的生动回忆,也是会想起一幕幕定格美好的角色演绎~
◤物料内容◢
1⃣️ 书立:L型两片式 两片一组*组
2⃣ 转印贴:与书立同柄纯文字 两张一组*组
3️⃣ 流沙麻将 :以下两款共组
:双面款:双面同芯不同柄
:单面透光反光款冰箱贴:两种图柄
4⃣️ 双面满天星明信片:与流麻同柄*张
5️⃣特别掉落:〔破格3.0〕炫彩紫PVC手环
◤领取方式◢
时间:0528/0601/0616(待定)
基本条件:关注@張泽Echo 及#张泽[超话]#
书立、流麻【均需预约,因数量限制每位小伙伴仅限一款请见谅,以包含三种物料的set形式发放】:既往泽场剧目≥8(不包含拼盘、个音),既往泽场数量≥10(不包含拼盘,婉拒最低价),持当场
转印贴、明信片:持当场且抓到我
手环:仅在破格音乐会掉落,具体待更新
⬛ 中抽一位伙伴送流麻双面款set,满足基本条件即可,限泽相关剧场自提
⬛约换优先,请小窗戳我预约款式、领取日期、票根,没回就多戳几下~
注:
书立由于重量问题请在约定日期领取,体积较大请自备包袋,尽量散场后领取,使用前需自行撕膜。
转印贴撕膜留图,建议用于光滑的硬表面上,不适用于硅胶、布料、磨砂面等材质。
流麻两款三种随机发放不接受指定,单面流麻为二次手工作物,难免手工痕迹请谅解。
会根据发放情况适当加量,剧场见[抱一抱] https://t.cn/A6phU76Q
✨@ 張泽Echo✨
✨²⁰²³/₅.₃₀ ℋ ℬℎ✨
✨场快乐ᥫᩣ✨
个人应援——物料发放
◤歌词串连回忆,角色定义永恒◢
选取泽泽目前13部剧中的歌词(台词),通过歌词接龙的方式进行串连,是会不自觉唱出来的生动回忆,也是会想起一幕幕定格美好的角色演绎~
◤物料内容◢
1⃣️ 书立:L型两片式 两片一组*组
2⃣ 转印贴:与书立同柄纯文字 两张一组*组
3️⃣ 流沙麻将 :以下两款共组
:双面款:双面同芯不同柄
:单面透光反光款冰箱贴:两种图柄
4⃣️ 双面满天星明信片:与流麻同柄*张
5️⃣特别掉落:〔破格3.0〕炫彩紫PVC手环
◤领取方式◢
时间:0528/0601/0616(待定)
基本条件:关注@張泽Echo 及#张泽[超话]#
书立、流麻【均需预约,因数量限制每位小伙伴仅限一款请见谅,以包含三种物料的set形式发放】:既往泽场剧目≥8(不包含拼盘、个音),既往泽场数量≥10(不包含拼盘,婉拒最低价),持当场
转印贴、明信片:持当场且抓到我
手环:仅在破格音乐会掉落,具体待更新
⬛ 中抽一位伙伴送流麻双面款set,满足基本条件即可,限泽相关剧场自提
⬛约换优先,请小窗戳我预约款式、领取日期、票根,没回就多戳几下~
注:
书立由于重量问题请在约定日期领取,体积较大请自备包袋,尽量散场后领取,使用前需自行撕膜。
转印贴撕膜留图,建议用于光滑的硬表面上,不适用于硅胶、布料、磨砂面等材质。
流麻两款三种随机发放不接受指定,单面流麻为二次手工作物,难免手工痕迹请谅解。
会根据发放情况适当加量,剧场见[抱一抱] https://t.cn/A6phU76Q
✋热门推荐