哪里可以获得简单的Boost线程管理示例?

时间:2010-11-05 01:08:09

标签: c++ multithreading boost

所以我有一个简单的cpp文件。只有一个具有一个主函数和三个int a-la公共变量。像:

   int a;
   int b;
   int c;
   void main()
   {
      startThredA();
      startThredB();
      while(1)
     {
        c = a + b;
        printf(c);
     }
   }

我想创建2个A和B,其中一个应为A生成随机值,为b生成另一个随机值。怎么做这个?

2 个答案:

答案 0 :(得分:3)

这是一个简单的小例子。它已经尝试过并且似乎工作正常。

#include <iostream>
#include <boost/thread.hpp>

namespace this_thread = boost::this_thread;

int a = 0;
int b = 0;
int c = 0;

class BaseThread
{
public:
    BaseThread()
        { }
    virtual ~BaseThread()
        { }

    void operator()()
    {
        try
        {
            for (;;)
            {
                // Check if the thread should be interrupted
                this_thread::interruption_point();

                DoStuff();
            }
        }
        catch (boost::thread_interrupted)
        {
            // Thread end
        }
    }

protected:
    virtual void DoStuff() = 0;
};

class ThreadA : public BaseThread
{
protected:
    virtual void DoStuff()
    {
        a += 1000;
        // Sleep a little while (0.5 second)
        this_thread::sleep(boost::posix_time::milliseconds(500));
    }
};

class ThreadB : public BaseThread
{
protected:
    virtual void DoStuff()
    {
        b++;
        // Sleep a little while (0.5 second)
        this_thread::sleep(boost::posix_time::milliseconds(100));
    }
};

int main()
{
    ThreadA thread_a_instance;
    ThreadB thread_b_instance;

    boost::thread threadA = boost::thread(thread_a_instance);
    boost::thread threadB = boost::thread(thread_b_instance);

    // Do this for 10 seconds (0.25 seconds * 40 = 10 seconds)
    for (int i = 0; i < 40; i++)
    {
        c = a + b;
        std::cout << c << std::endl;

        // Sleep a little while (0.25 second)
        this_thread::sleep(boost::posix_time::milliseconds(250));
    }

    threadB.interrupt();
    threadB.join();

    threadA.interrupt();
    threadA.join();
}

答案 1 :(得分:2)

有一系列文章starting here应该给你一些初步的指示。作者在很大程度上负责将boost.thread引导到C ++ 0x中。

文章列表:

C ++中的多线程0x第1部分:启动线程

C ++中的多线程0x第2部分:使用函数对象和参数启动线程

C ++中的多线程0x第3部分:使用成员函数和引用参数启动线程

C ++中的多线程0x第4部分:保护共享数据

C ++中的多线程0x第5部分:使用std :: unique_lock进行灵活锁定&lt;&gt;

C ++中的多线程0x第6部分:使用原子进行延迟初始化和双重检查锁定

C ++中的多线程0x第7部分:锁定多个没有死锁的互斥锁

C ++中的多线程0x第8部分:期货,承诺和异步函数调用