From: niXman <i.n...@gm...> - 2011-09-28 04:17:15
|
Example: int main() { std::mutex mutex; std::condition_variable cond; std::unique_lock<std::mutex> lock(mutex); cond.wait_for(lock, std::chrono::milliseconds(1000)); // <<<<<<<<<<<<<< SIGSEGV } Backtrace: Program received signal SIGSEGV, Segmentation fault. 0x00000000 in ?? () (gdb) backtrace #0 0x00000000 in ?? () #1 0x00401688 in __gthread_cond_timedwait (__cond=0x22fec4, __mutex=0x22fed4, __abs_timeout=0x22fe10) at c:/mingw/bin/../lib/gcc/i686-pc-mingw32/4.6.2/../../../../include/c++/4.6 .2/i686-pc-mingw32/bits/gthr-default.h:853 #2 0x004053b6 in std::condition_variable::__wait_until_impl<std::chrono::system _clock, std::chrono::duration<long long, std::ratio<1ll, 1000000000ll> > > ( this=0x22fec4, __lock=..., __atime=...) at c:/mingw/bin/../lib/gcc/i686-pc-mingw32/4.6.2/../../../../include/c++/4.6 .2/condition_variable:158 #3 0x0040531b in std::condition_variable::wait_until<std::chrono::duration<long long, std::ratio<1ll, 1000000000ll> > > (this=0x22fec4, __lock=..., __atime=...) at c:/mingw/bin/../lib/gcc/i686-pc-mingw32/4.6.2/../../../../include/c++/4.6 .2/condition_variable:95 #4 0x0040542a in std::condition_variable::wait_for<long long, std::ratio<1ll, 1 000ll> > (this=0x22fec4, __lock=..., __rtime=...) at c:/mingw/bin/../lib/gcc/i686-pc-mingw32/4.6.2/../../../../include/c++/4.6 .2/condition_variable:127 #5 0x004019ae in _fu3___ZSt4cout () at thtest.cpp:12 (gdb) If I compile this code with "-static" - it works. |
From: niXman <i.n...@gm...> - 2011-09-28 16:45:33
|
> > It is a known problem and probably due to an operation libstdc++ does when > std::thread is used that winpthreads doesn't like but should allow. I don't > know how to fix this, sorry. Maybe Kai or JonY have more ideas on the > matter. > > Ruben > > Hi Ruben! Tell me, if I use pthread-win32 instead winpthreads would it solve this problem? Or, maybe You know how to build mingw with "--enable-static --enable-shared" using winpthread just as a static library? Thank's. niXman. |
From: Ruben V. B. <van...@gm...> - 2011-09-28 17:22:34
|
2011/9/28 niXman <i.n...@gm...> > It is a known problem and probably due to an operation libstdc++ does when >> std::thread is used that winpthreads doesn't like but should allow. I don't >> know how to fix this, sorry. Maybe Kai or JonY have more ideas on the >> matter. >> >> Ruben >> >> Hi Ruben! > > Tell me, if I use pthread-win32 instead winpthreads would it solve this > problem? > No, you can't use std::thread with pthreads-win32. It doesn't support all the required functionality. > Or, maybe You know how to build mingw with "--enable-static > --enable-shared" using winpthread just as a static library? > That is not only impossible, it wouldn't be right. This would allow mulltiple instances of winpthreads (the statically linked one in the libstdc++ dll, the libgcc dll, the libgomp dll etc) to exist side by side, and this would lead to... anarchy. Your best bet is to either build all your prerequisites as static libraries if possible (so exceptions are all thrown in one binary, the final executable, or don't use std::thread yet. Ruben |
From: niXman <i.n...@gm...> - 2011-09-28 17:59:36
|
> > No, you can't use std::thread with pthreads-win32. It doesn't support all > the required functionality. Nonetheless, I'll try and I'll notify you about the results. That is not only impossible, it wouldn't be right. This would allow > mulltiple instances of winpthreads (the statically linked one in the > libstdc++ dll, the libgcc dll, the libgomp dll etc) to exist side by side, > and this would lead to... anarchy. Yes, you're right. Has anyone tried to resolve this problem? If so, where can I read about it? In fact, the problem exists. Thanks. niXman. |
From: K. F. <kfr...@gm...> - 2011-09-28 18:17:47
|
Hello Ruben and niXman! (niXman... Is that supposed to be some kind of superhero?) On Wed, Sep 28, 2011 at 1:22 PM, Ruben Van Boxem <van...@gm...> wrote: > 2011/9/28 niXman <i.n...@gm...> >>> >>> It is a known problem and probably due to an operation libstdc++ does >>> when >>> std::thread is used that winpthreads doesn't like but should allow. I >>> don't >>> know how to fix this, sorry. Maybe Kai or JonY have more ideas on the >>> matter. >>> >>> Ruben >> >> Hi Ruben! >> Tell me, if I use pthread-win32 instead winpthreads would it solve this >> problem? > > No, you can't use std::thread with pthreads-win32. It doesn't support all > the required functionality. I would disagree. I have std::thread working correctly (as far as I can tell) with pthreads-win32 and mingw-w64. I had to make some minor -- essentially trivial -- patches to the particular build of mingw-w64 that I was using, but it wasn't much. When I compiled my std::thread applications (with the pthreads-win32 solution), I didn't have to use the "-static" option. Ruben, correct me if I'm wrong, but I thought the main reasons for writing winpthreads were to avoid the pthreads-win32 licensing issues, and to implement the pthread handle as a scalar (pointer) (as is typical in most unix implementations), rather than as a structure (as in pthreads-win32), to gain greater compatibility with existing pthreads-based code. That is to say, I don't believe winpthreads -- the new implementation of pthreads -- was needed to get std::thread working, but was done for other reasons. As far as I can tell, with the exception of tweaking the handle issue, the version of std::thread that ships with gcc works almost out of the box with pthreads-win32. niXman, if your use case is to use std::thread with mingw-w64 and pthreads-win32, I should be able to refer you to some earlier posts that show how to do it, and could probably give you some pointers if you hit snags. > ... > Ruben Best. K. Frank |
From: niXman <i.n...@gm...> - 2011-09-28 18:40:40
|
Hi Frank. > (niXman... Is that supposed to be some kind of superhero?) No. It`s from the "Man who always uses the *nix" platform =) niXman, if your use case is to use std::thread with mingw-w64 and > pthreads-win32, I should be able to refer you to some earlier posts that > show how to do it, and could probably give you some pointers if you > hit snags. Thanks anticipatorily. niXman. |
From: niXman <i.n...@gm...> - 2011-09-30 04:04:28
|
I have rebuilt with usage pthreads-win32 - there was other error. In general I was tangled... I will ask once again: Somebody tried to understand in what the bug reason? niXman. 2011/9/28 niXman <i.n...@gm...>: > Hi Frank. > >> >> (niXman... Is that supposed to be some kind of superhero?) > > No. It`s from the "Man who always uses the *nix" platform =) >> >> niXman, if your use case is to use std::thread with mingw-w64 and >> pthreads-win32, I should be able to refer you to some earlier posts that >> show how to do it, and could probably give you some pointers if you >> hit snags. > > Thanks anticipatorily. > niXman. > |
From: K. F. <kfr...@gm...> - 2011-09-30 14:15:38
|
Hello niXman! On Fri, Sep 30, 2011 at 12:04 AM, niXman <i.n...@gm...> wrote: > I have rebuilt with usage pthreads-win32 - there was other error. In > general I was tangled... I don't understand exactly what you are saying. When you say "with usage pthreads-win32", what do you mean? When you say "in general I was tangled", could you give a short explanation of some of the problems you are having? If you are trying to use pthreads-win32 to get std::thread working with mingw-w64, I gave some instructions in an earlier post: http://sourceforge.net/mailarchive/message.php?msg_id=26533138 (If I remember correctly, I cross-posted this, so you probably can also find this post in the mingw-w64-public archive.) Note (See point 4 in the post.) that the compile command does not require the "-static" flag (if I recall correctly that this was your issue). > I will ask once again: Somebody tried to understand in what the bug reason? > > niXman. Good luck, and... Happy Hacking! K. Frank > 2011/9/28 niXman <i.n...@gm...>: >> Hi Frank. >> >>> >>> (niXman... Is that supposed to be some kind of superhero?) >> >> No. It`s from the "Man who always uses the *nix" platform =) >>> >>> niXman, if your use case is to use std::thread with mingw-w64 and >>> pthreads-win32, I should be able to refer you to some earlier posts that >>> show how to do it, and could probably give you some pointers if you >>> hit snags. >> >> Thanks anticipatorily. >> niXman. >> ... |
From: niXman <i.n...@gm...> - 2011-09-30 23:47:28
|
> > I don't understand exactly what you are saying. When you say > "with usage pthreads-win32", what do you mean? http://sourceware.org/pthreads-win32/ If you are trying to use pthreads-win32 to get std::thread working > with mingw-w64, I gave some instructions in an earlier post: > > http://sourceforge.net/mailarchive/message.php?msg_id=26533138 Thanks K. Frank! P.S. Sorry for my bad english :( |