对于假设数据库,有三种操作:搜索,追加,修改
搜索:可以与任意数量的其他搜索操作同时运行
追加:数据库一次只能运行一个追加操作以及任意数量的搜索
修改:应锁定数据库以防止所有其他搜索,追加和修改操作。
到目前为止,这就是伪代码。即使我以相同的顺序锁定和解锁东西,我也会遇到死锁问题吗?我遇到的问题是修改操作没有对数据库的独占访问权限。这可以通过带有一个标志的信号量来解决吗?
sem_t append;
sem_init(&append, 0, 1);
我不需要帮助将其实现为编程语言。我只是想弄清楚锁,解锁和信号量的正确位置,以便满足上述规则。
pthread_mutex_t searchLock;
pthread_mutex_t appendLock;
pthread_mutex_t modifyLock;
ENTRY SECTION:
if(search operation)
lock(modifyLock);
unlock(modifyLock);
lock(searchLock);
unlock(searchLock);
else if(append operation)
lock(modifyLock);
lock(appendLock);
else //modify operation
lock(modifyLock);
lock(appendLock);
lock(searchLock);
--------------------------
CRITICAL SECTION:
//do something
--------------------------
EXIT SECTION:
if(append operation)
unlock(appendLock);
unlock(modifyLock);
if(modify operation)
unlock(appendLock);
unlock(searchLock);
unlock(modifyLock);