Şu anda temel bir iş parçacığı havuzu geliştiriyorum. C++ 11'in std::thread
, std::condition_variable
ve std::unique_lock
ile birlikte kullandım. Çalışıyor gibi görünüyor ve şimdi çok fazla aktif olmayan bazı konuları öldürebilmek istiyorum. Şimdilik, işleri boost::function
s std::queue
aracılığıyla verilmektedir. Ben boş bir boost::function
s ekleyerek düşünüyorum böylece konuları onların döngüsünden çıkmak zorunda biliyorum. parçacığının döngü şu şekildedir:,Kendisini ayırmak ve sonlandırmak için bir std :: thread alın
void ThreadPool::threadLoop()
{
boost::function<void()> oThreadTask;
std::unique_lock<std::mutex> oLock(m_oTaskMutex);
while (1)
{
// m_oCV is a static std::condition_variable
// m_oTaskQueue is a static std::queue< boost::function<void()> >
m_oCV.wait(oLock, [](){ return m_oTaskQueue.size(); });
oThreadTask = m_oTaskQueue.front();
m_oTaskQueue.pop();
m_oTaskMutex.unlock();
if (oThreadTask.empty())
break ;
oThreadTask();
}
// ??
}
şeydir ben döngü çıkıldı kez düzgün iplik ayırmak için nasıl emin değilim. İplik tutamacını aramak için temiz olmalı (std::list<std::thread*>
'a erişebilir ve kimliklerini std::this_thread::get_id()
ile karşılaştırabilir) ve detach()
iş parçacığının kendisinden veya join()
numaralı telefondan bile arama güvenli midir?
Teşekkür ederiz. En kolay yol, iş parçacığının kendilerini ayırmasıdır. – Jukurrpa