การใช้ semaphore lock function
วันนี้ทำงาน แล้วติดปัญหา ผมมี function นึงซึ่งใช้ในการจัดการ Linked-List
ซึ่ง linked-list ตัวนี้ถูกประกาศเป็น global
และโปรแกรมที่ผมทำนั้น การทำงานถูกแยกเป็น thread
ดังนั้นโอกาสที่ จะมีการ access Linked-list ตัวนี้ก็มีสูง
ลูกพี่ผมก็แนะนำให้ใช้ semaphore lock โดยขณะที่ มี เธรดไหนทำอยู่ก็ให้ lock ไว้ก่อน
โดย syntax ที่ใช้มีดังนี้
#include <semaphore.h> <—- Include
sem_t mutex; <— mutext variable
sem_wait(&mutex); <—- Lock
sem_post(&mutex); <—- Unlock
แต่ก่อนจะใช้ ต้อง Init ก่อนนะครับ
sem_init(&mutex, 0, 1);
เช่น
int editData()
{
sem_wait(&mutex);
A++;
sem_post(&mutex);
return A;
}
ข้อสำคัญคือ ต้อง Unlock ก่อนที่จะ Return นะครับ
ปล. ตอน compile ต้อง -lposix4 ด้วยนะครับ ^^