0

我有一个函数 ( my_func),它可以由具有多个线程的程序调用。而且我不希望这个函数同时执行两次或更多次。因为我在记忆中写作,我不希望他们同时写作。

void my_func()
{
    // I want a line that blocks the execution if one is still pending
    /* the code here */
}
4

2 回答 2

0

在函数开始时使用互斥锁并在退出函数之前使用互斥锁解锁

pthread_mutex_t my_func_mutex = PTHREAD_MUTEX_INITIALIZER;

 void my_func()
    {
        pthread_mutex_lock(&my_func_mutex); // at the beginning of your function
        .....
        pthread_mutex_unlock(&my_func_mutex); // do not forget to unlock your mutex before going out from your function
    }

如果你愿意,你可以用其他方式来做:

pthread_mutex_t my_func_mutex = PTHREAD_MUTEX_INITIALIZER;
#define MY_FUNC_MACRO() \
    do { \
        pthread_mutex_lock(&my_func_mutex); \
        my_func(); \
        pthread_mutex_unlock(&my_func_mutex); \
    } while(0)

 void my_func()
    {
        .....
    }

在你的代码中你调用MY_FUNC_MACRO()而不是my_func()

于 2013-02-06T10:28:00.350 回答
0

在写入同一位置时避免冲突的一种方法是确保按顺序完成写入。一种方法是使用互斥锁

int a = functionThatTakesALongTime();
pthread_mutex_lock(&mymutex);
sum+=a;
pthread_mutex_unlock(&mymutex);
于 2013-02-06T10:31:53.173 回答