1
0
mirror of https://github.com/aportelli/LatAnalyze.git synced 2025-04-11 03:20:46 +01:00

better interface for critical threaded sections

This commit is contained in:
Antonin Portelli 2021-11-28 23:51:56 +00:00
parent fe8c6c6630
commit 78351a9b76
3 changed files with 14 additions and 4 deletions

View File

@ -12,15 +12,15 @@ int main(void)
{ {
pool.addJob([i, &pool](void) pool.addJob([i, &pool](void)
{ {
pool.critical([i](void)
{ {
unique_lock<mutex> lock(pool.getMutex());
cout << "job " << i << " wait for " << i*100 << " ms" << endl; cout << "job " << i << " wait for " << i*100 << " ms" << endl;
} });
this_thread::sleep_for(chrono::milliseconds(i*100)); this_thread::sleep_for(chrono::milliseconds(i*100));
pool.critical([i](void)
{ {
unique_lock<mutex> lock(pool.getMutex());
cout << "job " << i << " done" << endl; cout << "job " << i << " done" << endl;
} });
}); });
} }
pool.terminate(); pool.terminate();

View File

@ -92,6 +92,14 @@ void ThreadPool::addJob(Job newJob)
condition_.notify_one(); condition_.notify_one();
} }
// critical section ////////////////////////////////////////////////////////////
void ThreadPool::critical(Job fn)
{
unique_lock<mutex> lock(mutex_);
fn();
}
// wait for completion ///////////////////////////////////////////////////////// // wait for completion /////////////////////////////////////////////////////////
void ThreadPool::terminate(void) void ThreadPool::terminate(void)
{ {

View File

@ -37,6 +37,8 @@ public:
std::mutex & getMutex(void); std::mutex & getMutex(void);
// add jobs // add jobs
void addJob(Job newJob); void addJob(Job newJob);
// critical section
void critical(Job fn);
// wait for completion and terminate // wait for completion and terminate
void terminate(void); void terminate(void);
private: private: