タグ付けされた質問 「pthreads」

Pthreads(POSIX Threads)は、スレッドを作成および操作するための標準化されたCベースのAPIです。現在、POSIX.1-2008(IEEE Std 1003.1、2013 Edition / The Open Group Base Specification Issue 7)で定義されています。

14
Linuxでのpthread_createへの未定義の参照
https://computing.llnl.gov/tutorials/pthreads/から次のデモをWebから入手しました。 #include <pthread.h> #include <stdio.h> #define NUM_THREADS 5 void *PrintHello(void *threadid) { long tid; tid = (long)threadid; printf("Hello World! It's me, thread #%ld!\n", tid); pthread_exit(NULL); } int main (int argc, char *argv[]) { pthread_t threads[NUM_THREADS]; int rc; long t; for(t=0; t<NUM_THREADS; t++){ printf("In main: creating thread %ld\n", t); rc = …


3
cmakeおよびlibpthread
私は走っRHEL 5.1て使っていますgcc。 コンパイルとリンクcmakeに追加-pthreadするように指示するにはどうすればよいですか?
188 pthreads  cmake 

10
pthreadの条件変数関数にミューテックスが必要なのはなぜですか?
私は読んでいpthread.hます。条件変数に関連する関数(などpthread_cond_wait(3))には、引数としてミューテックスが必要です。どうして?私が知る限りでは、その引数として使用するためだけにミューテックスを作成しますか?そのミューテックスは何をすることになっているのですか?


5
Valgrindによって検出されたまだ到達可能なリーク
このブロックで言及されている関数はすべてライブラリ関数です。このメモリリークを修正するにはどうすればよいですか? 「まだ到達可能」カテゴリの下にリストされています。(さらに4つあります。非常によく似ていますが、サイズはさまざまです) 630 bytes in 1 blocks are still reachable in loss record 5 of 5 at 0x4004F1B: calloc (vg_replace_malloc.c:418) by 0x931CD2: _dl_new_object (dl-object.c:52) by 0x92DD36: _dl_map_object_from_fd (dl-load.c:972) by 0x92EFB6: _dl_map_object (dl-load.c:2251) by 0x939F1B: dl_open_worker (dl-open.c:255) by 0x935965: _dl_catch_error (dl-error.c:178) by 0x9399C5: _dl_open (dl-open.c:584) by 0xA64E31: do_dlopen (dl-libc.c:86) by 0x935965: …
154 c  pthreads  valgrind 

4
なぜpthread_cond_waitに偽のウェイクアップがあるのですか?
manページを引用するには: 条件変数を使用する場合、各条件に関連付けられた共有変数を含むブール述語が常にあり、スレッドが続行する場合はtrueになります。pthread_cond_timedwait()またはpthread_cond_wait()関数からの誤ったウェイクアップが発生する場合があります。pthread_cond_timedwait()またはpthread_cond_wait()からの戻りは、この述部の値について何の意味も持たないので、そのような戻り時に述部を再評価する必要があります。 そのため、pthread_cond_wait通知していなくても戻ることができます。少なくとも一見すると、それはかなりひどいようです。これは、間違った値をランダムに返したり、実際に適切なreturnステートメントに到達する前にランダムに返したりする関数のようなものです。大きなバグのようです。しかし、これを修正するのではなくmanページに文書化することを選択したという事実は、pthread_cond_wait誤って目を覚ますことになる正当な理由があることを示しているようです。おそらく、それがどうしようもないようにそれを作るそれがどのように機能するかについて本質的な何かがある。問題は何ですか。 なぜpthread_cond_wait偽って戻るのですか?正しく通知された場合にのみウェイクアップすることを保証できないのはなぜですか?誰かがその偽の振る舞いの理由を説明できますか?
145 c  pthreads 

2
コンパイル時の-pthreadフラグの重要性
さまざまなマルチスレッドのCおよびC ++プロジェクトで-pthread、コンパイルステージとリンクステージの両方にフラグが適用されるのを見ましたが、他の人はまったく使用せず-lpthread、リンクステージに渡しています。 -pthreadフラグを使用してコンパイルおよびリンクしないという危険はあり-pthreadますか?つまり、実際には何をしますか?私は主にLinuxプラットフォームに興味があります。
143 c++  c  linux  pthreads 

3
mingw-w64スレッド:posix vs win32
私はWindowsにmingw-w64をインストールしています。win32スレッドとposixスレッドの2つのオプションがあります。私は、win32スレッドとpthreadの違いを知っていますが、これら2つのオプションの違いはわかりません。posixスレッドを選択すると、CreateThreadのようなWinAPI関数を呼び出せなくなると思います。 このオプションは、どのスレッドAPIがプログラムまたはライブラリによって使用されるかを指定しているようですが、何によって使用されますか?GCC、libstdc ++、または他の何かによって? 私はこれを見つけました: Windowsのgccポートでのthread_posixsとthread_win32の違いは何ですか? つまり、このバージョンのmingwでは、threads-posixリリースはposix APIを使用してstd :: threadの使用を許可し、threads-win32はwin32 APIを使用して、std :: thread部分を無効にします標準。 OK、Win32スレッドを選択すると、std :: threadは使用できなくなりますが、Win32スレッドは引き続き使用されます。しかし、何によって使用されますか?
127 windows  gcc  pthreads  mingw 



8
pthread_create()によって呼び出される関数への複数の引数?
別のスレッドで呼び出したい関数に複数の引数を渡す必要があります。私がしまし読んこれを行うための典型的な方法は、構造体を定義することへの関数のポインタを渡し、引数のためにそれを逆参照することであること。ただし、これを機能させることはできません。 #include <stdio.h> #include <pthread.h> struct arg_struct { int arg1; int arg2; }; void *print_the_arguments(void *arguments) { struct arg_struct *args = (struct arg_struct *)args; printf("%d\n", args -> arg1); printf("%d\n", args -> arg2); pthread_exit(NULL); return NULL; } int main() { pthread_t some_thread; struct arg_struct args; args.arg1 = 5; args.arg2 = 7; …
93 c  pthreads 

4
再入可能ロックと一般的なコンセプトは何ですか?
私はいつも混乱します。誰かがさまざまな状況でリエントラントが何を意味するかを説明できますか?そして、なぜ再入可能ではなく再入可能を使用したいのですか? pthread(posix)ロックプリミティブと言いますが、それらは再入可能ですか?それらを使用するときに回避すべき落とし穴は何ですか? mutexは再入可能ですか?

4
PTHREAD_MUTEX_INITIALIZERとpthread_mutex_init(&mutex、param)
違いはありますか pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; または pthread_mutex_t lock; pthread_mutex_init ( &lock, NULL); 最初の方法のみを使用しても安全ですか? 注:私の質問は、ほとんどの場合、せいぜい数台のクライアントをサーバーに接続して、ワーカースレッドでの問い合わせを解決するだけの非常に小さなプログラムに関係しています。
89 c  ubuntu  pthreads  mutex 

9
クラスのpthread関数
私が次のようなクラスを持っているとしましょう class c { // ... void *print(void *){ cout << "Hello"; } } そして、私はcのベクトルを持っています vector<c> classes; pthread_t t1; classes.push_back(c()); classes.push_back(c()); 今、私はスレッドを作成したい c.print(); そして、以下は私に以下の問題を与えています: pthread_create(&t1, NULL, &c[0].print, NULL); エラー出力:引数「3」の「void *(tree_item :: )(void)」を「void *()(void)」に変換できませんint pthread_create(pthread_t *、const pthread_attr_t *、void *()(void)、void *) '
86 c++  pthreads 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.