ในวันแรก ๆ ของ FORTRAN และ BASIC โปรแกรมทั้งหมดถูกเขียนด้วยคำสั่ง GOTO ผลลัพธ์คือโค้ดสปาเก็ตตี้และวิธีแก้ปัญหาคือการเขียนโปรแกรมแบบมีโครงสร้าง
ตัวชี้อาจมีลักษณะควบคุมได้ยากในโปรแกรมของเรา C ++ เริ่มต้นด้วยตัวชี้มากมาย แต่แนะนำให้ใช้การอ้างอิง ไลบรารี่อย่าง STL สามารถลดการพึ่งพาของเราได้บ้าง นอกจากนี้ยังมีสำนวนในการสร้างสมาร์ทพอยน์เตอร์ที่มีคุณสมบัติดีกว่าและ C ++ บางรุ่นจะอนุญาตให้อ้างอิงและจัดการโค้ด
วิธีปฏิบัติในการเขียนโปรแกรมเช่นการสืบทอดและ polymorphism ใช้ตัวชี้จำนวนมากเบื้องหลัง ภาษาเช่น Java กำจัดพอยน์เตอร์และใช้การรวบรวมขยะเพื่อจัดการข้อมูลที่จัดสรรแบบไดนามิกแทนที่จะขึ้นอยู่กับโปรแกรมเมอร์เพื่อจับคู่คำสั่งใหม่และลบทั้งหมด
ในการอ่านของฉันฉันได้เห็นตัวอย่างของการเขียนโปรแกรมแบบหลายกระบวนการและหลายเธรดที่ดูเหมือนจะไม่ใช้เซมาฟอร์ พวกเขาใช้สิ่งเดียวกันกับชื่อที่แตกต่างกันหรือพวกเขามีวิธีการใหม่ในการจัดโครงสร้างการปกป้องทรัพยากรจากการใช้งานพร้อมกันหรือไม่?
ตัวอย่างเช่นตัวอย่างเฉพาะของระบบสำหรับการเขียนโปรแกรมมัลติเธรดที่มีตัวประมวลผลมัลติคอร์คือ OpenMP มันแสดงให้เห็นถึงภูมิภาคที่สำคัญดังต่อไปนี้โดยไม่ต้องใช้เซมาฟอร์ซึ่งดูเหมือนจะไม่รวมอยู่ในสภาพแวดล้อม
th_id = omp_get_thread_num();
#pragma omp critical
{
cout << "Hello World from thread " << th_id << '\n';
}
ตัวอย่างนี้เป็นข้อความที่ตัดตอนมาจาก: http://en.wikipedia.org/wiki/OpenMP
อีกวิธีหนึ่งการป้องกันเธรดที่คล้ายกันจากการใช้เซมาฟอร์พร้อมกับฟังก์ชั่น wait () และ signal () อาจมีลักษณะเช่นนี้:
wait(sem);
th_id = get_thread_num();
cout << "Hello World from thread " << th_id << '\n';
signal(sem);
ในตัวอย่างนี้สิ่งต่าง ๆ นั้นค่อนข้างเรียบง่ายและเพียงแค่การตรวจสอบอย่างง่ายก็เพียงพอที่จะแสดงการเรียกรอ () และสัญญาณ () ที่จับคู่และแม้จะมีการทำงานพร้อมกันมากก็ตาม แต่อัลกอริธึมอื่นนั้นซับซ้อนกว่าและใช้เซมาฟอร์หลายอัน (ทั้งไบนารีและการนับ) แพร่กระจายไปทั่วฟังก์ชั่นหลายตัวด้วยเงื่อนไขที่ซับซ้อนที่สามารถเรียกใช้โดยเธรดจำนวนมาก ผลที่ตามมาจากการสร้างการหยุดชะงักหรือความล้มเหลวในการทำให้เธรดปลอดภัยสามารถจัดการได้ยาก
ระบบเหล่านี้เช่น OpenMP กำจัดปัญหาเกี่ยวกับเซมาฟอร์หรือไม่
พวกเขาย้ายปัญหาไปที่อื่นหรือไม่?
ฉันจะแปลงเซมาฟอร์ที่ฉันชื่นชอบโดยใช้อัลกอริทึมเพื่อไม่ใช้เซมาฟอเรสอีกต่อไปได้อย่างไร