在使用并行计算时,要避免多个线程同时访问同一内存位置,否则可能导致数据竞争和不一致的结果。常见的解决方法有以下几种:
#include
int shared_data; // 共享内存 pthread_mutex_t mutex; // 定义互斥锁
void *worker(void *arg) { // 访问共享内存前加锁 pthread_mutex_lock(&mutex);
// 访问共享内存
shared_data++;
// 访问完毕后释放锁
pthread_mutex_unlock(&mutex);
return NULL;
}
int main() { // 初始化互斥锁 pthread_mutex_init(&mutex, NULL);
// 创建多个线程并发访问共享内存
// ...
// 销毁互斥锁
pthread_mutex_destroy(&mutex);
return 0;
}
#include
void *worker(void *arg) { int private_data = (int)malloc(sizeof(int)); // 为该线程分配私有内存 *private_data = (int)arg; // 将共享内存数据复制到私有内存中 // 对私有内存进行操作 *private_data++;