我正在制作一个多线程C程序,它涉及在两个线程之间共享一个全局动态整数数组。一个线程将继续向其添加元素&另一个将独立扫描阵列&释放扫描的元素。 任何人都可以建议我如何做到这一点,因为我正在做的是创造僵局 也请任何人提供它的代码或解决这个死锁的方法和完整的解释
答案 0 :(得分:1)
对于线程,我会使用pthread。用-pthread
编译它。
#include <pthread.h>
int *array;
// return and argument should be `void *` for pthread
void *addfunction(void *p) {
// add to array
}
// same with this thread
void *scanfunction(void *p) {
// scan in array
}
int main(void) {
// pthread_t variable needed for pthread
pthread_t addfunction_t, scanfunction_t; // names are not important but use the same for pthread_create() and pthread_join()
// start the threads
pthread_create(&addfunction_t, NULL, addfunction, NULL); // the third argument is the function you want to call in this case addfunction()
pthread_create(&scanfunction_t, NULL, scanfunction, NULL); // same for scanfunction()
// wait until the threads are finish leave out to continue while threads are running
pthread_join(addfunction_t, NULL);
pthread_join(scanfunction_t, NULL);
// code after pthread_join will executed if threads aren't running anymore
}
以下是pthread的一个很好的示例/教程:*klick*
答案 1 :(得分:1)
在这种情况下,您需要查看阵列上每个操作生成的频率和负载。例如,如果连续扫描阵列,但每小时只添加一次,那么它的价值在于找到一个非常慢,延迟的写入机制,从而消除了对读锁的需求。在这种情况下,用互斥锁锁定每次访问都是非常不令人满意的。
如果没有“扫描”操作的详细信息,尤其是持续时间和频率,则无法建议线程通信策略以获得良好的性能。
Anohter的事情ee不知道是失败的后果 - 如果一个新的添加在实际插入之前排队了一段时间可能无关紧要,或者可能。
如果你想要一个“计算机科学101”的答案,很可能是非常糟糕的性能,用互斥锁锁定对阵列的每次访问。
答案 2 :(得分:0)