2013-04-17 20 views

cevap

7

GÜNCELLEME: Jonathan Wakely nazik -pthread derleyici ve bağlayıcı hem geçirilecek olan bir he says (below in comments) bu konuda baktı . Bunu yaparsam, kod gcc 4.7.2 ile de başarısız olmaz. Bu nedenle, cevabın, belirtilen e-postayla ilgisi yok. Teşekkürler Jonathan! İşte


bazı tırnak düz 2011 yılında yazılı gcc geliştirici Jonathan Wakely's mail oluşturur şunlardır: Bizim std :: iplik :: id

Tüm karşılaştırma operatörlerini tanımsız davranış kullanan çünkü bizim thread :: id sadece bir pthread_t.

[...]

2) operatörü ==, POSIX geçersiz iplik kimlikleri için tanımsız olan pthread_equal diyor kullanır:

If either t1 or t2 are not valid thread IDs, the behavior is undefined. 
iki yıl önce yazılmış olmasına rağmen Muhtemelen hala geçerli. Şu anda daha fazla bilgi için gcc codebase'i kontrol edemiyorum.

Garip . Aşağıdaki kodu:

#include <iostream> 
#include <thread> 

int main() { 

    std::cout << "Started" << std::endl; 

    std::thread::id nobody; 

    if (nobody != std::this_thread::get_id()) { 

     std::cout << "OK" << std::endl; 
    } 

    std::cout << "Finished" << std::endl; 
} 

üretir:

Started 
OK 
Finished 

kontrol here. Ancak kodunuz 4.7.2 ile başarısız oluyor.

+1

Derleyici ve bağlayıcıya '-pread 'iletmezseniz, yalnızca 4.7.2 ile başarısız olur. Muhtemelen 'pthread_equal'' libpthread.so'ya bağlanmadığınızda her zaman doğru döner, sanırım bu '''de bir hata, bu yüzden düzeltmek daha iyi olur –

+2

Açık olmak gerekirse, bunun bir şey olduğunu sanmıyorum Aldığınız posta ile yapmak için, 'stp :: thread' kullanmak ve' -pthread ' –

+0

@JonathanWakely ile bağlantı kurmaya çalışıyorum ile yapmak, Evet, şimdi, hemen yanıtı güncelleyin. – Ali

6

C++ 11 standart erişimi yok ama son standart taslağından n3485 [thread.thread.id]

tipi dişin bir nesne :: id için benzersiz tanımladı fi er sağlar yürütme bir iplik temsil etmez yürütme ve iplik nesneler için tek bir ayrı değer her bir iplik (30.3.1)

id() noexce ardından pt; E ff ects: Bir tür id nesnesini oluşturur. Postconditions: Oluşturulan nesne bir yürütme işlemini temsil etmiyor.

Bu da ne gözlemlediğiniz gcc bir hata olduğunu ima görünüyor

İlgili konular