主要是B,C在读写时,会不会访问到A的值?这些维度之间不是独立的吧!如果是独立的,就不用这么麻烦了。
[quote=引用 21 楼 OneOnce 的回复:][quote=引用 18 楼 赵4老师的回复:]#include <pthread.h> pthread_mutex_t mutexes[5]; int data[5]; void* handle(void* arg){ while(1){ for (int i=0;i<5;i++) { pthread_mutex_lock(&mutexes[i]); data[i]=i; pthread_mutex_unlock(&mutexes[i]); } } } int main() { int i; for(i=0;i<10;++i) pthread_mutex_init(&mutexes[i],NULL); pthread_t p[10]; for(i=0;i<10;++i) pthread_create(&p[i],NULL,handle,NULL); for(i=0;i<10;++i) pthread_join(p[i],NULL); return 0; }
#include <pthread.h> pthread_mutex_t mutexes[5]; int data[5]; void* handle(void* arg){ while(1){ for (int i=0;i<5;i++) { pthread_mutex_lock(&mutexes[i]); data[i]=i; pthread_mutex_unlock(&mutexes[i]); } } } int main() { int i; for(i=0;i<10;++i) pthread_mutex_init(&mutexes[i],NULL); pthread_t p[10]; for(i=0;i<10;++i) pthread_create(&p[i],NULL,handle,NULL); for(i=0;i<10;++i) pthread_join(p[i],NULL); return 0; }
[quote=引用 18 楼 赵4老师的回复:]#include <pthread.h> pthread_mutex_t mutexes[5]; int data[5]; void* handle(void* arg){ while(1){ for (int i=0;i<5;i++) { pthread_mutex_lock(&mutexes[i]); data[i]=i; pthread_mutex_unlock(&mutexes[i]); } } } int main() { int i; for(i=0;i<10;++i) pthread_mutex_init(&mutexes[i],NULL); pthread_t p[10]; for(i=0;i<10;++i) pthread_create(&p[i],NULL,handle,NULL); for(i=0;i<10;++i) pthread_join(p[i],NULL); return 0; }
下标0 没线程竞争不用管 A线程写下标0时本来就不影响B和C线程写下标1
[quote=引用 1 楼 千梦一生的回复:]我感觉仅A单独写[0]内存不存在对该内存的竞争啊。 不过大多数情况有读就有写。这时候就要考虑互斥的问题了。 int arr[10] --------------------------------------------------- 线程B: ... lock(第二个元素的读写锁) 写arr[1] unlock ... --------------------------------------------------- 线程C: ... lock(第二个元素的读写锁) 写arr[1] unlock ... ---------------------------------------------------
我感觉仅A单独写[0]内存不存在对该内存的竞争啊。 不过大多数情况有读就有写。这时候就要考虑互斥的问题了。 int arr[10] --------------------------------------------------- 线程B: ... lock(第二个元素的读写锁) 写arr[1] unlock ... --------------------------------------------------- 线程C: ... lock(第二个元素的读写锁) 写arr[1] unlock ... ---------------------------------------------------
64,282
社区成员
250,470
社区内容
加载中
试试用AI创作助手写篇文章吧