我是一名Java程序员,但目前正在使用C++语言工作。与Java不同,C++没有定义任何线程实用程序。对我来说,在C++中实现多线程应用程序有点困难。有没有办法使用C++实现自己的线程库?必须掌握一些汇编语言的概念吗?我曾经在许多场合尝试从操作系统特定的功能创建线程,但我总是失败了。有人能帮忙吗?
我是一名Java程序员,但目前正在使用C++语言工作。与Java不同,C++没有定义任何线程实用程序。对我来说,在C++中实现多线程应用程序有点困难。有没有办法使用C++实现自己的线程库?必须掌握一些汇编语言的概念吗?我曾经在许多场合尝试从操作系统特定的功能创建线程,但我总是失败了。有人能帮忙吗?
考虑到您的专业水平,也许Boost Threads会有帮助?
http://www.boost.org/doc/libs/1_37_0/doc/html/thread.html
当然,您可以实现自己的线程库。您不需要了解任何汇编语言来这样做,但是没有C标准库函数可以帮助您,您将需要使用特定于操作系统的库。例如,在Windows上,您可以使用 beginthreadex CRT函数,该函数最终调用 CreateThread Win32系统调用,但在许多Unix上,您将使用 pthread_create。除了启动线程之外,您可能还需要一些同步原语,Boost库在这方面 也提供了。 如果您想自己编写,请在Windows上查看 CreateMutex,WaitForSingleObject和ReleaseMutex或CriticalSection函数,在Unix上查看pthread_mutex_init。
class WorkerThread : public ACE_Task_Base
{
public:
int svc() { ... }
};
int main()
{
WorkerThread worker;
worker.activate();
worker.wait();
}
class Worker : public Poco::Runnable { ... };
int main()
{
Worker worker;
Poco::Thread thr;
thr.start( worker );
thr.join();
}
class X { public: void method( int argument ); }
int main()
{
X x;
boost::thread thr( boost::bind( &X::method, &x, 100 ) );
thr.join();
}
另一个易于使用、平台无关的并发 HEADER ONLY 库:
https://github.com/zlateski/zi_lib/tree/master/zi/concurrency/
示例位于测试目录下
如果你使用像Linux或Unix这样的POSIX系统甚至是Windows, 你可以使用pthread。
如果你卡在没有.NET的Windows机器上,我认为你别无选择,只能学习win32线程。当然,在管道中有大量的“win32线程库”可供使用。
我猜测大多数大型代码仓库都有一些自定义实现...
在Windows上最容易的选择可能是使用.NET线程,它们更容易处理。 你可以免费获得Visual C++ .NET。
在 C++ 中可以使用 Pthreads。我通常只是编写一些简单的包装器。
另外,如果您只是想分解一堆低级循环,请尝试使用 OpenMP。它非常容易使用。
我有一个小的 C++ 项目,其中包含一个线程库。目的非常具体,但它可能作为一个示例。