2011-11-17 4 views
7

ileNeden makecontext (ipler olsun nedeniyle, makecontext pthread (3) kütüphaneye karşı bağlamak programlarında kullanılmamalıdır cari pthread uygulanmasında sınırlamalara ... makecontext kılavuzda itibaren pthreads

çalışmıyor kullanılmış veya değil).

Şimdi benim sorum şu ki, neden çalışmıyor ve alternatif yöntemler nelerdir. Aslında, bazı noktalarda kullanıcı düzeyinde bir iş parçacığı yığınları ile ilgileniyorum, ancak ben swapcontext yaptığım zaman, ben şimdi ve sonra segmentasyon hataları olsun görüyorum. Ne yapmalıyım?

Böyle bir şey başarmak istiyorum ...

void thread_func(void * thread_args) 
{ 
a(); 
b(); 
getcontext/makecontext/swapcontext to call c(); 
d(); 
.... 
} 

Yani bu durumda, ben fonksiyonu c yürütürken ayrı yığın kullanmak istiyorum. Nedeniyle cari pthread uygulanmasında sınırlamalara

+0

Çok zor bir soru; Henüz bir şey yok! – MetallicPriest

+0

'makecontext'/etc' yi ne için kullanmaya çalışıyorsunuz? Temel amaçları pthreads zaten var olduğunda aptalca olan diş açma kütüphanelerinin uygulanmasındadır. – duskwuff

+0

@duskwuff, Bunu iş parçacığı amaçlı kullanmıyorum. – MetallicPriest

cevap

9

, makecontext (3) kütüphane pthread karşı bağlamak programlarında kullanılmamalıdır

kılavuzun bölüm yuvarlamak için kullanılan LinuxThreads için geçerlidir Yani

Geçerli iş parçacığı tanımlayıcısını bulmak için %esp değeri kadar. Alternatif bir yığın üzerinde çalışıyorsanız, bu (açıkçası) geçerli bir iş parçacığı tanımlayıcısı üretmez.

LinuxThreads artık son 5+ yıl içinde dağıtılan herhangi bir Linux tarafından kullanılmıyor ve {get,make,swap}context NPTL iş parçacıkları ile gayet iyi çalışıyor.

DÜZENLEME: Aslında, yalnızca değil Linux docs yılında, NetBSD docs yılında "nedeniyle sınırlamalara" bölümüne bakın. Ben swapcontext yaptığımda

, ben her şimdi ve sonra

Sen şimdi ve sonra parçalama arızası şeklinde kendini gösteren bir hata var segmentasyon hataları olsun. Bu hatanın nerede olabileceğini tahmin etmek için yeterli bilgi sağlamadınız.

+1

Şimdi çalıştığını bilmek güzel. EmployedRussian :-p cevabı için teşekkürler! Ve evet, gerçekten düzeltmiş olduğum bir hataydı. – MetallicPriest

İlgili konular