使用非阻塞主线程对数据库进行多线程访问

时间:2016-10-19 02:32:40

标签: c++ multithreading

我想在多线程关键应用程序中使用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();
   };

0 个答案:

没有答案