This is a basic implementation of a conditional variable using a semaphore and a mutex. A conditional variable is a synchronization primitive that allows threads to wait for a certain condition to be met before proceeding.

The cond_var_t struct contains a semaphore sem, a mutex mutex, and an integer value. The semaphore is used to block and unblock threads waiting on the conditional variable, while the mutex is used to protect access to the value variable.

The cond_var_init function initializes the conditional variable by initializing the semaphore and the mutex and setting the initial value of value to 0.

The cond_var_wait function is used by a thread that needs to wait for a certain condition to be met. It first acquires the mutex to ensure exclusive access to the value variable. It then increments the value of value and releases the mutex to allow other threads to access it. It then waits on the semaphore, which will block the thread until the semaphore is signaled by another thread using cond_var_signal. Once the semaphore is signaled, the thread is unblocked and it immediately signals the semaphore again to make sure it is in the unblocked state for the next wait.

The cond_var_signal function is used to signal the conditional variable and wake up any waiting threads. It first acquires the mutex to protect access to the value variable. If there are any threads waiting on the conditional variable (i.e., the value of value is greater than 0), it decrements the value of value and signals the semaphore to wake up one waiting thread. If there are no threads waiting, it simply releases the mutex.

The cond_var_destroy function destroys the conditional variable by destroying the semaphore and the mutex.
นี่คือการใช้งานพื้นฐานของตัวแปรตามเงื่อนไขโดยใช้เซมาฟอร์และ mutex ตัวแปรแบบมีเงื่อนไขคือการซิงโครไนซ์แบบดั้งเดิมที่อนุญาตให้เธรดรอให้ตรงตามเงื่อนไขบางอย่างก่อนดำเนินการต่อ โครงสร้าง cond_var_t มีเซมาฟอร์ sem, mutex mutex และค่าจำนวนเต็ม เซมาฟอร์ถูกใช้เพื่อบล็อกและปลดบล็อกเธรดที่รอตัวแปรตามเงื่อนไข ในขณะที่ mutex ถูกใช้เพื่อป้องกันการเข้าถึงตัวแปรค่า ฟังก์ชัน cond_var_init เริ่มต้นตัวแปรตามเงื่อนไขโดยการเริ่มต้นเซมาฟอร์และ mutex และตั้งค่าเริ่มต้นเป็น 0 ฟังก์ชัน cond_var_wait ถูกใช้โดยเธรดที่ต้องรอเพื่อให้ตรงตามเงื่อนไขบางประการ ก่อนอื่นจะได้รับ mutex เพื่อให้แน่ใจว่ามีการเข้าถึงตัวแปรค่าแบบเอกสิทธิ์เฉพาะบุคคล จากนั้นจะเพิ่มค่าของค่าและปล่อย mutex เพื่ออนุญาตให้เธรดอื่นเข้าถึงได้ จากนั้นจะรอบนเซมาฟอร์ ซึ่งจะบล็อกเธรดจนกว่าเซมาฟอร์จะถูกส่งสัญญาณโดยเธรดอื่นโดยใช้ cond_var_signal เมื่อสัญญาณเซมาฟอร์ถูกส่งสัญญาณ เธรดจะถูกปลดบล็อก และจะส่งสัญญาณสัญญาณอีกครั้งทันทีเพื่อให้แน่ใจว่าอยู่ในสถานะไม่ถูกบล็อคสำหรับการรอครั้งถัดไป ฟังก์ชัน cond_var_signal ใช้เพื่อส่งสัญญาณตัวแปรตามเงื่อนไขและปลุกเธรดที่รออยู่ ก่อนอื่นจะได้รับ mutex เพื่อป้องกันการเข้าถึงตัวแปรค่า หากมีเธรดใด ๆ ที่รออยู่บนตัวแปรตามเงื่อนไข (เช่น ค่าของค่ามากกว่า 0) เธรดนั้นจะลดค่าของค่าลง และส่งสัญญาณให้เซมาฟอร์ปลุกเธรดที่รอหนึ่งเธรด หากไม่มีเธรดรออยู่ มันก็เพียงปล่อย mutex ฟังก์ชัน cond_var_destroy ทำลายตัวแปรตามเงื่อนไขโดยการทำลายเซมาฟอร์และ mutex
spam lang_mismatch pii not_appropriate hate_speech sexual_content quality toxicity humor creativity violence