1
void wt(shared_ptr<io_service> io_servicee)
{
io_servicee->run();
}
void calculateAndReturn(int myNumber, shared_ptr<vector<int> > vectorOfResults)
{
/*
* Here will be a lot of pararel computing (first part)...
*/
int result = myNumber;
/* This part (second part) below I want to be executed sequentially depending on the number of thread.
* Thread which has myNumber == 1 should be first, second should be thread with
* myNumber == 2, third with myNumber == 3 etc.
*
*/
mt.lock();
vectorOfResults->push_back(result);
mt.unlock();
}
int main()
{
shared_ptr<io_service> io_servicee(new io_service);
shared_ptr<io_service::work> work(new io_service::work(*io_servicee));
shared_ptr<vector<int> > vectorOfSums(new vector<int>);
thread_group worker_threads;
for(int x = 0; x < 4; ++x)
{
worker_threads.create_thread(bind(&wt, io_servicee));
}
for(int x = 0; x < 4; ++x)
{
io_servicee->post(bind(&calculateAndReturn, x, vectorOfSums));
}
work.reset();
worker_threads.join_all();
for (int i = 0; i < vectorOfSums->size(); i++)
{
cout << (*vectorOfSums)[i] << endl;
}
}
我想序列化calculateAndReturn函數的一部分。它應該是這樣的:序列化部分工作 - boost :: asio
First part of thread 1 -------> \
\
First part of thread 2 -------> -- Second part of thread 1 --> second part of thread2...
/
.... /
/
First part of thread n ------->/
我不想用鏈主函數中,而之前在calculateAndReturn第二部分。有沒有優雅的解決方案?
問候
我從來沒有聽說過這個庫,這似乎是非常有用的,你的代碼是simplier。但在這種情況下,我想使用boost和asio庫,因爲我想編寫簡單的tcp服務器。不管怎麼說,還是要謝謝你! – Lukasz 2011-04-21 12:21:30