我有以下代码:
int resource;
sem_t s;
void function2()
{
// do some operation to resource
}
void function1()
{
sem_wait(&s);
function2();
sem_post(&s);
}
如果我们有不同的进程同时调用function1
,并且function1
已经被semaphore保护了,我们还需要semaphore来保护function2
?
最佳答案
您真正需要做的是使用信号量保护您的共享数据。至少这是最佳实践。信号量基本上用于保护可从各种功能访问的数据。典型的用法可能如下所示:
struct data {
yoursharedata;
sem_t lock;
}
每当您(从任何函数)访问您的共享数据时,获取锁,操作数据并释放锁。如下所示:
sem_wait(lock);
pock(yoursharedata);
sem_post(lock);
希望这会有所帮助!
关于c - 关于linux中的信号量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17316807/