รายการใน POSIX บน "การสร้างสัญญาณและการจัดส่ง " ใน "เหตุผล: ข้อมูลทั่วไปของอินเทอร์เฟซระบบ" กล่าว
สัญญาณที่สร้างขึ้นสำหรับกระบวนการถูกส่งไปยังเธรดเดียวเท่านั้น ดังนั้นหากมีมากกว่าหนึ่งเธรดที่มีสิทธิ์รับสัญญาณจะต้องเลือกหนึ่งเธรด ทางเลือกของเธรดจะถูกนำไปใช้อย่างเต็มที่จนถึงการใช้งานทั้งคู่เพื่อให้ช่วงกว้างที่สุดเท่าที่เป็นไปได้ของการปรับใช้และให้อิสระในการส่งสัญญาณไปยังเธรด "ที่ง่ายที่สุด" ถ้ามีความแตกต่าง
จากsignal(7)
คู่มือบนระบบ Linux:
สัญญาณอาจถูกสร้างขึ้น (และอยู่ระหว่างดำเนินการ) สำหรับกระบวนการโดยรวม (เช่นเมื่อส่งโดยใช้kill(2)
) หรือสำหรับเธรดเฉพาะ (เช่นสัญญาณบางอย่างเช่น SIGSEGV และ SIGFPE สร้างขึ้นเนื่องจากการดำเนินการเครื่องเฉพาะ - การเรียนการสอนภาษาเป็นผู้กำกับด้ายเช่นเดียวกับสัญญาณที่กำหนดเป้าหมายที่หัวข้อการใช้งานที่เฉพาะเจาะจงpthread_kill(3)
) สัญญาณที่มุ่งเน้นกระบวนการอาจถูกส่งไปยังหนึ่งในเธรดใด ๆ ที่ไม่มีสัญญาณในขณะนี้ หากมีมากกว่าหนึ่งเธรดที่มีสัญญาณถูกปลดบล็อกเคอร์เนลจะเลือกเธรดที่ต้องการส่งสัญญาณ
และในpthreads(7)
:
เธรดมีการตั้งค่าสแต็คสัญญาณอื่นที่แตกต่างกัน อย่างไรก็ตามการตั้งค่าสัญญาณสแต็กทางเลือกของเธรดใหม่จะถูกคัดลอกจากเธรดที่สร้างขึ้นเพื่อให้เธรดเริ่มต้นใช้ร่วมกันสแต็กสัญญาณทางเลือก (แก้ไขในเคอร์เนล 2.6.16)
จากpthreads(3)
คู่มือในระบบ OpenBSD (เป็นตัวอย่างของวิธีการสำรอง):
ตัวจัดการสัญญาณโดยปกติแล้วจะรันบนสแต็กของเธรดที่กำลังเรียกใช้ปัจจุบัน
(ขณะนี้ฉันไม่ทราบว่าจะจัดการสิ่งนี้อย่างไรเมื่อมีหลายเธรดที่ทำงานพร้อมกันบนเครื่องที่ใช้โปรเซสเซอร์หลายตัว)
การนำ Linux เธรดเก่ามาใช้ของเธรด POSIX อนุญาตเฉพาะเธรดเดี่ยวที่แตกต่างกันเท่านั้นที่จะถูกกำหนดเป้าหมายด้วยสัญญาณ จากpthreads(7)
บนระบบ Linux:
LinuxThreads ไม่สนับสนุนแนวคิดของสัญญาณที่ควบคุมกระบวนการ: สัญญาณอาจถูกส่งไปยังเธรดเฉพาะเท่านั้น