В boost-е есть библиотека для работы с потоками.
Большим плюсом является то, что она кроссплатформенная.
Документация тут.
Пример простой программы запускающей один thread:
#include <iostream>
#include <boost/thread.hpp>
#include <boost/date_time.hpp>
void workerFunc()
{
boost::posix_time::seconds workTime(3);
std::cout << "Worker: running" << std::endl;
// Pretend to do something useful...
boost::this_thread::sleep(workTime);
std::cout << "Worker: finished" << std::endl;
}
int main(int argc, char* argv[])
{
std::cout << "main: startup" << std::endl;
boost::thread workerThread(workerFunc);
std::cout << "main: waiting for thread" << std::endl;
workerThread.join();
std::cout << "main: done" << std::endl;
return 0;
}
Пример с использованием группы потоков и захватом mutex-а:
#include <iostream>
#include <boost/thread.hpp>
#include <boost/bind.hpp>
void print(int* arr, int from, int to) {
static boost::mutex ioMutex;
for (int i = from; i < to; ++i) {
boost::mutex::scoped_lock l(ioMutex);
std::cout << arr[i] << std::endl;
}
}
int main() {
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8};
boost::thread_group g;
g.create_thread(boost::bind(print, arr, 0, 4));
g.create_thread(boost::bind(print, arr, 4, 8));
g.join_all();
return 0;
}