我有函数 lock()、unlock()、query1()、query2() 和 query3()。查询函数只是在数据库上运行一些查询,可以被认为是对它的读/写访问。他们不锁定。我的系统是多线程的。
我想要的功能是:如果从线程 p1 调用 lock(),则只有来自线程 p1 的查询将运行,来自所有其他线程的查询等待解锁。我该怎么做呢?
我正在使用 C 中的 pthreads。为此,线程必须知道它持有锁。但是 pthreads 没有这样的功能。
设计错了吗??
编辑:
Function1(){
lock();
query1();
query2();
doQuery3();
unlock();
}
doQuery3(){
lock();
query3();
unlock();
}
我希望 lock() 的行为是,如果线程已经持有该锁,它不应该等待锁。它应该只是运行。问题是我的 lock() 函数实际上启动了一个事务。我想在事务中运行一堆东西。并且 unlock() 结束事务。我希望能够链接查询。一种解决方法是在 Function1() 中调用 query3() 而不是 doQuery3(); 这意味着每个函数都有两个版本,一个带有锁定功能,一个带有普通查询()
同样,这些锁定和解锁功能可能是也可能不是互斥锁。我尝试使用 pthread mutex 实现它,但不能。因为 pthread_mutex_lock 在同一个线程块上!有什么炫酷的技巧吗??