在C中实现同步数据结构

时间:2011-03-29 14:12:21

标签: c linux

你好我在C中构建了一个哈希表。我已经对它进行了单元测试,以确保它有效。问题是数据结构将动态链接到我没有编写的代码,并且可能正在使用线程。所以我需要同步它,以便它理论上可以正常工作任意数量的线程同时修改/读取它。在研究了pthread互斥API后,我做了以下

声明了一个静态全局变量:

static pthread_mutex_t lock;

在HashTable_init上(在使用哈希表之前总是调用它)我初始化它:

pthread_mutex_init(&lock,NULL);

在读取/写入结构的每个函数上,我在开始时设置了一个锁:

pthread_mutex_lock(&lock);

并在结束时解锁:

pthread_muter_unlock(&lock);

这足以使数据结构同步吗? (就在我的程序挂起的那一刻)。

谢谢

2 个答案:

答案 0 :(得分:2)

这可能还不够。通过锁定每个方法,您可以确保容器的内部结构在任何位置都是一致的;但容器的某些用途可能需要更多。

考虑以下相当简单的情况:在一个线程中,您通过某个键找到了一个项目并开始编辑它。当find()完成时,它会释放锁定,然后返回对项目的引用。同时可以获取锁定,并且另一个线程可能例如删除该项目,对于第一个线程来说非常意外。

设计和开发一个安全可靠的并发容器并非易事。我建议您改为寻找即用型解决方案。

答案 1 :(得分:1)

似乎没问题,只要你确保第一个线程只调用一次init,然后其他线程开始访问互斥锁。