使用pthreads,lock模拟数据库访问规则

时间:2013-04-29 08:27:38

标签: multithreading pthreads semaphore locks

对于假设数据库,有三种操作:搜索,追加,修改

搜索:可以与任意数量的其他搜索操作同时运行

追加:数据库一次只能运行一个追加操作以及任意数量的搜索

修改:应锁定数据库以防止所有其他搜索,追加和修改操作。

到目前为止,这就是伪代码。即使我以相同的顺序锁定和解锁东西,我也会遇到死锁问题吗?我遇到的问题是修改操作没有对数据库的独占访问权限。这可以通过带有一个标志的信号量来解决吗?

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);

0 个答案:

没有答案