两个线程将使用相同的func()
。两个线程应该是互斥的。如何让它正常工作?
(输出应为“abcdeabcde”)
char arr[] = "ABCDE";
int len = 5;
void func() {
for(int i = 0; i <len;i++)
printf("%c",arr[i]);
}
答案 0 :(得分:7)
创建互斥锁?假设你正在使用pthread,
static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
....
void func() {
int errcode = pthread_mutex_lock(&mutex);
// deal with errcode...
// printf...
errcode = pthread_mutex_unlock(&mutex);
// deal with errcode...
}
有关教程,请参阅https://computing.llnl.gov/tutorials/pthreads/#Mutexes。
答案 1 :(得分:1)
答案 2 :(得分:0)
由于您标记了此C ++,您应该知道C ++ 11包含专门用于处理锁定的标准库功能。
#include <mutex>
std::mutex arr_mutex;
char arr[] = "ABCDE";
int len = 5;
void func() {
// Scoped lock, which locks mutex and then releases lock at end of scope.
// Classic RAII object.
std::lock_guard<std::mutex> lock(arr_mutex);
for(int i = 0; i <len;i++)
printf("%c,arr[i]);
}