SORU
2 Kasım 2013, CUMARTESİ


C 11: ana Zaman müstakil bir konu olursa Ne çıkar?

std::thread başlıyorum ve sonra iplik std::thread Bir zamanlar temsil ettiği halde çalışmaya devam eder böylece detach(),, kapsam dışına çıkarsa varsayalım.

Program müstakil iplik katıldığınız için güvenilir bir protokol[1] yok, daha fazla kabul, müstakil iş parçacığı hala main() olduğunda çalışır.

Veremem ne olması gerektiğini açıklayan standart bir şey (daha doğrusu, N3797 C 14 taslak),, ne de 30.3 1.10 ilgili ifadeler içeren bulun.

[1] başka, muhtemelen eşdeğer bir soru: "müstakil bir iş parçacığı her zamankinden daha katıldı", çünkü ne olursa olsun protokol sensin icat etmekte, sinyal parçası olur ve yapılması sırasında iş parçacığı hala çalışan ve OS zamanlayıcı olabilir karar koymak iplik uyku için bir saat sonra sinyalizasyon yapıldı hiçbir şekilde alıcı taraf için güvenilir bir şekilde tespit parçacığı aslında bitmiş.

20150101 DÜZENLEME:Aşırı soru almak için:

Eğer müstakil bir iş parçacığı çalışan main() tükeniyor ise tanımsız davranışherhangi birstd::thread::detach() kullanımı ana konu hiçbir zaman çıkar sürece tanımsız davranış[2].

Böylece, müstakil iş parçacığı çalışan main() tükeniyor olması gerekirtanımlanmışetkiler. Soru:nerede(C standartPosıx , OS dokümanlar,...) bu etkileri tanımlanmıştır.

[2] müstakil Bir iş parçacığı (std::thread::join() anlamında) katılamaz. Sanaolabilirmüstakil iş parçacığı (sayım semafor bayrak std::packaged_task, Bir Gelecek üzerinden ya da örneğin bir koşul ve değişken) sonuçları beklemek, ama bunun garantisi yokiş parçacığı yürütme bitirdi. Bu konuyu ilk otomatik nesnenin yıkıcı, orada sinyal parçası koymak sürece gerçekten degenel olarak , kod (yıkıcılar) çalıştırılmasısonrasinyal kodu. Eğer OS programları ana iş parçacığı müstakil iplik çalışmasını bitirmeden önce sonuç tüketmek ve çıkmak için yıkıcı " dedi,^İle ne tanımlanmış ne olacak?

CEVAP
2 Kasım 2013, CUMARTESİ


Ayırma Konuları

17* *göre :

İplik nesneden yürütme iş parçacığı, izin ayırır yürütme bağımsız olarak devam etmek. Herhangi bir kaynak olacaktır iş parçacığı çıkar sonra serbest bıraktı.

http://pubs.opengroup.org/onlinepubs/009695299/functions/pthread_detach.html :

Bu pthread_detach() işlevi uygulanmasına belirtecektir iş parçacığı için iş parçacığı depolama bu iş parçacığı zaman geri olabilir sona erdirir. Eğer iplik, pthread_detach sona varsa da olmayacaktır bunu sona erdirmek neden. Birden fazla pthread_detach etkisi() çağırır aynı hedef üzerinde iplik belirtilmemiş.

Ayırma konuları uygulama tamamlamak için bir iş parçacığı (işlem sonlandırma kadar çalıştırmak gerekir örneğin cinleri,) için beklemeye gerek yok diye esas kaynak tasarrufu için:

  1. std::thread bir nesne katılmadan kapsam dışı bırak, normalde imha std::terminate() çağrı götüren şeydir. uygulama yan kolu serbest:
  2. İzin OS temizleme iş parçacığı belirli kaynaklar (TCB) otomatik olarak iplik çıkar, çünkü biz açıkça belirtilmiş, biz değil katılmak isteyen iplik daha sonra, böylece, bir katılamıyor zaten müstakil bir konu.

Öldürme Konuları

İşlem sona erdirme davranışı en azından bazı sinyalleri yakalayabilecek olan ana iş parçacığı, aynı ist. Ya diğer konuları işleyebilir olup olmadığını sinyallerinin bir veya ana iş parçacığı sinyal işleyicisi çağrı içinde başka bir iş parçacığı katılın sona erdirmek gibi önemli değildir. İlgili soru: Propagating Signal (SIGINT) to C 11 threads

Daha önce de belirttiğimiz gibi, herhangi bir iş parçacığı, müstakil olsun ya da olmasın, çoğu İşletim sistemleri üzerinde işlem (http://en.wikipedia.org/wiki/Thread_(computing)) ile ölür. Sürecin kendisi ana işlevi döndürerek exit() çağırarak sinyali yükselterek ya da iptal edilebilir. Ancak, C 11'i ve Java VM geliştiriciler kesinlikle bir dereceye kadar bu tür farklılıklar soyut olabilir, ancak temel işletim sistemi tam bir davranışı tanımlamak için deneyin. AFAIK, egzotik işlem ve iş parçacığı modelleri genellikle bulunan eski platformlar (hangi C 11 muhtemelen olmayacak taşıdık) ve çeşitli gömülü sistemler, bir özel ve/veya sınırlı dil Kütüphanesi uygulaması da sınırlı dil desteği.

İş Parçacığı Desteği

Eğer iş parçacığı değil desteklenen std::thread::get_id() dönmeyin geçersiz kimliği (varsayılan inşa std::thread::id) gibi bir düz süreç, değil gereken bir iş parçacığı nesnesi çalıştırın ve yapıcı bir std::thread atmak std::system_error. Bu günümüz İşletim sistemleri ile birlikte C 11 anlıyorum. Eğer süreçlerinde temel bir iş parçacığı spawn yok parçacığı desteği ile bir işletim sistemi varsa, bana bildirin.

Kontrol Konuları

Eğer uygun bir kapatma için bir iş parçacığı üzerinde kontrol tutmak için ihtiyacı varsa, eşitleme ilkel ve/veya bayraklar çeşit kullanarak bunu yapabilirsiniz. Ancak, bu durumda, ayarı kapatma bayrak ardından katılın yolu tercih ederim, o zamandan beri hiçbir anlamı yok. Artan karmaşıklığı ile ayırma konuları, kaynakları olurdu serbest aynı anda her neyse, burada birkaç bayt std::thread nesne vs daha karmaşık ve belki de daha fazla eşitleme ilkel olması kabul edilebilir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Candyrat Records

    Candyrat Rec

    10 Mayıs 2006
  • Jordie Jordan

    Jordie Jorda

    27 Ocak 2008
  • RyanXLT

    RyanXLT

    22 Ocak 2011