我想在多线程关键应用程序中使用sqlite,其中不应阻止主线程。目前我脑子里有两个拓扑显示为片段,哪一个更好,为什么?选项I似乎更简单,但我也希望远程分布式系统通过套接字查询数据库,其中选项II看起来更加真实。还有其他方法吗?
选项I - 使用原子标记
class database_t
{
private:
static std::atomic<bool> main_busy_flag_; // to pre-empt worker threads
std::mutex mutex_;
};
class watchdog_thread
{
void use_database()
{
while (database_t::is_main_busy()) { this_thread::sleep_for(100);}
// lock mutex and do something
}
};
选项II - 使用优先级队列
typedef pair<int, query_t> priority_query_t;
class database_t
{
private:
priority_queue<priority_query_t> queries_;
list <query_result_t> query_results_;
public:
void insert_query(int priority,query_t query );
void process_queries();
};