一种经典的死锁模型

来源:互联网 发布:2016年进出口贸易数据 编辑:程序博客网 时间:2024/06/05 18:18
#include <stack>#include <iostream>#include <set>#include <cstdio>#include <boost/thread.hpp>#include <boost/atomic.hpp>#include <boost/function.hpp>#include <boost/bind.hpp>using namespace std;using namespace boost;class Request;class Inventory{public:    void add(Request *req)    {        mutex::scoped_lock lock(mutex_);        requests_.insert(req);    }    void remove(Request *req)    {        mutex::scoped_lock lock(mutex_);        requests_.erase(req);    }    void printAll();private:    mutex mutex_;    set<Request*> requests_;} g_inventory;class Request{public:    void process()    {        mutex::scoped_lock lock(mutex_);        g_inventory.add(this);    }    ~Request()    {        mutex::scoped_lock lock(mutex_);        sleep(1);        g_inventory.remove(this);    }    void print()    {        mutex::scoped_lock lock(mutex_);        printf("this is request\n");    }private:    mutex mutex_;};void Inventory::printAll(){    mutex::scoped_lock lock(mutex_);    sleep(1);    for(set<Request*>::const_iterator it=requests_.begin(); it!=requests_.end(); ++it)    {        (*it)->print();    }    printf("Inventory::printAll() unlocked\n");}void threadFunc(){    Request *req=new Request();    req->process();    delete req;}int main(){    thread t(threadFunc);    usleep(500*1000);    g_inventory.printAll();    t.join();}

0 0
原创粉丝点击