สัญญาณกับจอภาพ - อะไรคือความแตกต่าง?


233

อะไรคือความแตกต่างที่สำคัญระหว่างจอภาพกับสัญญาณ ?


8
คุณสามารถคิดว่าการตรวจสอบเป็นสัญญาณสัญญาณแบบไบนารี
Maxim Egorushkin

ที่คล้ายกัน: stackoverflow.com/q/3547030/158779
Brian Gideon

1
โปรดผ่านalbahari.com/threading/part2.aspxนี้ ฉันอ่านบทความนี้ดีที่สุดที่ฉันเคยอ่านในเธรด
Shantanu Gupta

5
ฉันไม่คิดว่าคุณพูดถูก Maxim สัญญาณคือโครงสร้าง "ระดับล่าง" ถ้าฉันไม่เข้าใจผิดในขณะที่จอภาพเป็นวัตถุที่เป่าเต็ม ฉันจำได้ว่าเราไปตรวจสอบสั้น ๆ ในชั้นเรียนระบบปฏิบัติการในวิทยาลัย แต่ฉันจำไม่ได้ว่าจอภาพแตกต่างจาก Mutex อย่างไรนอกเหนือจากการใช้วัตถุ ฉันจำได้ว่าปัญหาหนึ่งสามารถทำได้โดยใช้จอภาพ แต่เราไม่สามารถใช้วิธีเดียวกันนี้ในชั้นเรียนได้เนื่องจากข้อ จำกัด ของภาษา C
user919860

1
สัญญาณและการตรวจสอบนั้นมีความแตกต่างกันมาก แต่มีความสามารถเทียบเท่ากันในแง่ที่คุณสามารถนำมาใช้จากสิ่งอื่นได้ คุณสามารถอ่านกระดาษเดิมของโฮร์ที่พิสูจน์ความเท่าเทียมกันของพวกเขาจากที่นี่
Thanh DK

คำตอบ:


529

จอภาพเป็นวัตถุที่ออกแบบมาเพื่อเข้าถึงได้จากหลายหัวข้อ ฟังก์ชั่นสมาชิกหรือวิธีการของวัตถุจอภาพจะบังคับใช้การยกเว้นซึ่งกันและกันดังนั้นอาจมีเพียงหนึ่งเธรดที่กำลังทำการกระทำใด ๆ บนวัตถุในเวลาที่กำหนด หากเธรดหนึ่งกำลังเรียกใช้ฟังก์ชันสมาชิกของวัตถุอยู่ในขณะนี้เธรดอื่นใดที่พยายามเรียกใช้ฟังก์ชันสมาชิกของวัตถุนั้นจะต้องรอจนกว่าการประมวลผลแรกจะเสร็จสิ้น

สัญญาณเป็นวัตถุในระดับต่ำกว่า คุณอาจใช้เซมาฟอร์เพื่อสร้างมอนิเตอร์ สัญญาณเป็นหลักเป็นเพียงเคาน์เตอร์ เมื่อตัวนับเป็นบวกถ้าเธรดพยายามรับสัญญาณจากนั้นก็จะได้รับอนุญาตและตัวนับจะลดลง เมื่อเธรดเสร็จสิ้นแล้วมันจะปล่อยสัญญาณและเพิ่มตัวนับ

หากตัวนับนั้นเป็นศูนย์อยู่แล้วเมื่อเธรดพยายามรับเซมาฟอร์จากนั้นก็ต้องรอจนกว่าเธรดอื่นจะปล่อยเซมาฟอร์ หากหลายเธรดกำลังรอเมื่อเธรดปล่อยเซมาฟอร์แล้วหนึ่งในนั้นจะได้รับ เธรดที่ออกเซมาฟอร์ไม่จำเป็นต้องเป็นเธรดเดียวกับที่ได้รับมา

จอภาพเหมือนห้องน้ำสาธารณะ สามารถป้อนครั้งละหนึ่งคนเท่านั้น พวกเขาล็อคประตูเพื่อป้องกันไม่ให้คนอื่นเข้ามาทำสิ่งต่าง ๆ แล้วปลดล็อคเมื่อพวกเขาออกไป

สัญญาณเป็นเหมือนสถานที่เช่าจักรยาน พวกเขามีจักรยานจำนวนหนึ่ง หากคุณลองและเช่าจักรยานและพวกเขามีหนึ่งฟรีแล้วคุณสามารถใช้มันมิฉะนั้นคุณต้องรอ เมื่อมีคนส่งคืนจักรยานของพวกเขาคนอื่นก็สามารถรับมันได้ หากคุณมีจักรยานคุณสามารถมอบให้คนอื่นเพื่อส่งคืนได้ - สถานที่เช่าจักรยานไม่สนใจว่าใครจะคืนจักรยานตราบใดที่พวกเขาได้จักรยานกลับมา


162
+1 ที่ยอดเยี่ยมมีห้องน้ำสาธารณะและที่เช่าจักรยาน ฉันจะไม่มีวันลืมความแตกต่างระหว่างสองสิ่งนี้
Drupad Panchal

4
คำตอบของคุณดูเหมือนจะขัดแย้งกับstackoverflow.com/a/7336799/632951 .. แล้วใครล่ะที่ถูกต้อง?
Pacerier

6
@Pierier: ฉัน :-) ความขัดแย้งเพียงอย่างเดียวคือสิ่งที่ระดับสูง / ระดับต่ำ คุณสามารถสร้างจอภาพจากเซมาฟอเรสมันไม่ได้เป็นระเบียบมากนักเพราะจอภาพเป็นโครงสร้างระดับสูงกว่าเซมาฟอร์ สัญญาณเป็นเพียงเคาน์เตอร์กับการรอคอย ฉันขอแนะนำให้อ่าน "The Little Book of Semaphores" greenteapress.com/semaphores
Anthony Williams

3
@AnthonyWilliams: ฉันอาจสงสัยในความคิดที่ว่าคุณสามารถสร้างจอภาพจากเซมาฟอร์ได้เท่านั้น อีกวิธีหนึ่งก็เป็นไปได้และเนื่องจากเราไม่สามารถพูดได้อย่างเต็มที่ว่าจอภาพเป็นเอนทิตีระดับสูงกว่าเซมาฟอร์
Kavish Dwivedi

5
ใช่คุณสามารถสร้างสัญญาณจากจอภาพ คุณสามารถสร้างวัตถุระดับต่ำจากวัตถุระดับสูงได้ตลอดเวลา สิ่งที่ระดับสูง / ต่ำนั้นเกี่ยวกับความสามารถและขอบเขตของการดำเนินการไม่ใช่สิ่งที่สามารถใช้เพื่อสร้างสิ่งอื่นได้
Anthony Williams

11

คำอธิบายต่อไปนี้อธิบายถึงวิธีการรอ () และสัญญาณ () ของจอภาพแตกต่างจาก P และ V ของสัญญาณ

รอ ()และสัญญาณ ()การดำเนินงานเกี่ยวกับตัวแปรเงื่อนไขในการตรวจสอบมีความคล้ายคลึงกับPและVการดำเนินงานเกี่ยวกับการนับสัญญาณ

คำสั่งรอสามารถบล็อกการดำเนินการของกระบวนการในขณะที่คำสั่งสัญญาณสามารถทำให้กระบวนการอื่นจะถูกยกเลิกการปิดกั้น อย่างไรก็ตามมีความแตกต่างบางอย่างระหว่างพวกเขา. เมื่อกระบวนการดำเนินการการดำเนินการ P ก็ไม่จำเป็นต้องปิดกั้นกระบวนการนั้นเพราะสัญญาณการนับอาจจะมากกว่าศูนย์ ในทางตรงกันข้ามเมื่อมีการดำเนินการคำสั่ง wait คำสั่งนั้นจะบล็อกกระบวนการเสมอ เมื่องานดำเนินการการดำเนินงาน V ​​บนสัญญาณมันจะปลดบล็อกงานที่รอสัญญาณหรือเพิ่มตัวนับสัญญาณถ้าไม่มีงานที่จะปลดล็อค ในทางกลับกันหากกระบวนการดำเนินการคำสั่งสัญญาณเมื่อไม่มีกระบวนการอื่นที่จะปลดบล็อกจะไม่มีผลกับตัวแปรเงื่อนไข ความแตกต่างระหว่างเซมาฟอร์และจอภาพก็คือผู้ใช้ที่ถูกปลุกด้วยการทำงาน V ​​สามารถกลับมาทำงานได้โดยไม่ล่าช้า ในทางกลับกันผู้ใช้ที่ถูกปลุกด้วยการทำงานของสัญญาณจะถูกรีสตาร์ทเฉพาะเมื่อปลดล็อคจอภาพ นอกจากนี้

ลิงก์: ที่นี่เพื่ออ่านเพิ่มเติม หวังว่ามันจะช่วย


6

คำตอบหนึ่งบรรทัด:

จอภาพ: ควบคุมเพียงหนึ่งเธรดในแต่ละครั้งสามารถดำเนินการในจอภาพ (จำเป็นต้องได้รับการล็อคเพื่อรันเธรดเดี่ยว)

สัญญาณ: ล็อคที่ปกป้องทรัพยากรที่ใช้ร่วมกัน (จำเป็นต้องได้รับการล็อคเพื่อเข้าถึงทรัพยากร)


5

สัญญาณช่วยให้หลายหัวข้อ (ไม่เกินจำนวนที่กำหนด) เพื่อเข้าถึงวัตถุที่ใช้ร่วมกัน จอภาพอนุญาตให้เข้าถึงแบบเอกสิทธิ์เฉพาะบุคคลร่วมกันกับวัตถุที่ใช้ร่วมกัน

หน้าจอ

สัญญาณ


10
แต่แล้วจอภาพจะแตกต่างจาก MutEx อย่างไร ล็อกการแยกกันทำในสิ่งเดียวกันกับ aa semaphore แต่อนุญาตให้เธรดหนึ่งเธรดเข้าถึงได้ในแต่ละครั้งที่สำคัญ
user919860

2
ใช่อะไรคือความแตกต่างระหว่าง mnitor และ mutex?
Pacerier

2
น่าสังเกตว่า Semaphores ไม่ได้ควบคุมการเข้าถึงวัตถุที่ใช้ร่วมกัน แต่เป็นทรัพยากรที่ใช้ร่วมกัน (ซึ่งจะมีหลายวัตถุ)
xbonez

@ xbonez: ถ้าเราดูjava.util.ArrayList: มันเป็นวัตถุหรือภาชนะของวัตถุหลาย ๆ มันเป็นทั้งสองอย่างในเวลาเดียวกัน สัญญาณที่เหมาะสมในการควบคุมการเข้าถึงมันคืออะไร? ฉันจะบอกว่า: ไม่
dma_k

ในคำตอบที่ยอมรับนั้นมีการกล่าวถึงว่า Monitor กำลังใช้งาน Mutual Exclusion โปรดดู "ฟังก์ชั่นสมาชิกหรือวิธีการของวัตถุตรวจสอบจะบังคับใช้การกีดกันซึ่งกันและกันดังนั้นเพียงหนึ่งเธรดอาจทำการกระทำใด ๆ กับวัตถุในเวลาที่กำหนด"
achoora

2

เมื่อสัญญาณที่ใช้ในการป้องกันภูมิภาคที่สำคัญไม่มีความสัมพันธ์โดยตรงระหว่างสัญญาณและข้อมูลที่ได้รับการคุ้มครอง นี่เป็นส่วนหนึ่งของเหตุผลที่ semaphores อาจแยกย้ายกันไปรอบ ๆ รหัสและทำไมมันง่ายที่จะลืมโทรรอหรือแจ้งซึ่งในกรณีนี้ผลลัพธ์จะตามลำดับเพื่อละเมิดการแยกกันหรือล็อคทรัพยากรอย่างถาวร

ในทางตรงกันข้ามสิ่งที่เลวร้ายเหล่านี้สามารถเกิดขึ้นได้กับจอมอนิเตอร์ มอนิเตอร์เหนื่อยกับข้อมูลโดยตรง (มันห่อหุ้มข้อมูล) และเนื่องจากการดำเนินการของจอภาพเป็นการกระทำแบบอะตอมมิกจึงไม่สามารถเขียนรหัสที่สามารถเข้าถึงข้อมูลได้โดยไม่ต้องเรียกโปรโตคอลการป้อนข้อมูล โปรโตคอลทางออกถูกเรียกโดยอัตโนมัติเมื่อการดำเนินการตรวจสอบเสร็จสมบูรณ์

จอภาพมีกลไกในตัวสำหรับการซิงโครไนซ์เงื่อนไขในรูปแบบของตัวแปรเงื่อนไขก่อนดำเนินการต่อ หากเงื่อนไขไม่เป็นที่พอใจกระบวนการจะต้องรอจนกว่าจะได้รับแจ้งการเปลี่ยนแปลงเงื่อนไข เมื่อกระบวนการกำลังรอการซิงโครไนส์เงื่อนไขการใช้งานจอภาพจะดูแลปัญหาการแยกซึ่งกันและกันและอนุญาตให้กระบวนการอื่นเข้าถึงการตรวจสอบ

นำมาจากเนื้อหาของหลักสูตร Open University M362 บทที่ 3 "กระบวนการโต้ตอบ"


ยกเว้นว่าแม้ว่าเซมาฟอร์จะมีอยู่ทั่วไปในภาษาและนำเสนอในตำราเป็นตัวแปรที่มีตัวดำเนินการอะตอม จำกัด แต่สัญญาณก็เป็นกรณีพิเศษของจอภาพ - เพราะมันเป็นตัวแปรที่มีตัวดำเนินการอะตอม จำกัด เพราะนั่นคือสิ่งที่จอภาพเป็น ข้อโต้แย้งข้างต้นว่าเซมาฟอร์เป็น "ระดับล่าง" ที่กว้างขวาง
philipxy

2

สัญญาณ:

การใช้เคาน์เตอร์ธงหรือการควบคุมการเข้าถึงทรัพยากรที่ใช้ร่วมกันบางอย่างในระบบพร้อมกันหมายถึงการใช้งานของสัญญาณ

ตัวอย่าง:

  1. เคาน์เตอร์เพื่อให้ผู้โดยสารเพียง 50 คนได้รับ 50 ที่นั่ง (ทรัพยากรที่ใช้ร่วมกัน) ของโรงละคร / รถบัส / รถไฟ / การขี่สนุก / ห้องเรียน และเพื่ออนุญาตให้ผู้โดยสารใหม่เฉพาะเมื่อมีคนออกจากที่นั่ง
  2. ธงแบบไบนารีระบุสถานะว่าง / ไม่ว่างของห้องน้ำใด ๆ
  3. สัญญาณไฟจราจรเป็นตัวอย่างที่ดีของธง พวกเขาควบคุมการไหลโดยการควบคุมเส้นทางของยานพาหนะบนถนน (ทรัพยากรที่ใช้ร่วมกัน)

การตั้งค่าสถานะเท่านั้นเปิดเผยสถานะปัจจุบันของทรัพยากรไม่มีการนับหรือข้อมูลอื่น ๆ บนวัตถุที่รอหรือเรียกใช้บนทรัพยากร

การตรวจสอบ:

จอภาพประสานการเข้าถึงวัตถุโดยการสื่อสารกับหัวข้อที่สนใจในวัตถุที่ขอให้พวกเขาเข้าถึงการซื้อหรือการรอคอยสำหรับเงื่อนไขบางอย่างที่จะกลายเป็นความจริง

ตัวอย่าง:

  1. พ่ออาจทำหน้าที่คอยดูแลลูกสาวของเธอปล่อยให้เธอออกเดทครั้งละหนึ่งคนเท่านั้น
  2. ครูในโรงเรียนใช้กระบองเพื่อให้เด็กเพียงคนเดียวเท่านั้นที่สามารถพูดในชั้นเรียนได้
  3. สุดท้ายเป็นเทคนิคการทำธุรกรรม (ผ่านกระทู้) ในวัตถุบัญชีทำข้อมูลให้ตรงกันเพื่อรักษาความสมบูรณ์

ฉันคิดว่าสัญญาณไฟจราจรที่ข้ามถนนก็เป็นธงแบบไบนารี่ด้วยเช่นกัน: รถยนต์บนถนนเส้นเดียวหรือบนถนนมุมฉากสามารถขับได้ นอกจากนี้ฉันคิดว่าตัวอย่างเหล่านั้นเป็นตัวพิมพ์เล็กสำหรับเซมาฟอร์ (ตัวเล็ก) ซึ่งสามารถนำไปใช้งานได้โดยใช้มอนิเตอร์ มีตัวอย่างทั่วไปมากขึ้นในการเป็นวิกิพีเดีย
dma_k
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.