[解決済み] pthread_create が動作しない。引数 3 の警告を渡す。
2022-02-14 23:52:37
質問内容
スレッドを作成しようとしているのですが、私の記憶では、これが正しい方法であるはずです。
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#define NUM_THREADS 5
int SharedVariable =0;
void SimpleThread(int which)
{
int num,val;
for(num=0; num<20; num++){
if(random() > RAND_MAX / 2)
usleep(10);
val = SharedVariable;
printf("*** thread %d sees value %d\n", which, val);
SharedVariable = val+1;
}
val=SharedVariable;
printf("Thread %d sees final value %d\n", which, val);
}
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 = pthread_create(&threads[t], NULL, SimpleThread, (void* )t);
if (rc){
printf("ERROR; return code from pthread_create() is %d\n", rc);
exit(-1);
}
}
/* Last thing that main() should do */
pthread_exit(NULL);
}
そして、出たエラーはこれ。
test.c: 関数 'main' 内: test.c:28: warning: 引数 3 の渡す pthread_create' は互換性のないポインタ型からです。 /usr/include/pthread.h:227: note: 期待される 'void * (*) )(ボイド )' が 引数は 'void (*)(int)' 型です。
SimpleThread関数を変更することができないので、パラメータの型を変更することは、すでに試してみて、それもうまくいかなかったにもかかわらず、選択肢ではありません。
私は何を間違えているのでしょうか?
どうすればいいですか?
SimpleThread
は、次のように宣言する必要があります。
void* SimpleThread(void *args) {
}
スレッドにパラメータを渡す場合、そのパラメータを定義するために
struct
へのポインタを渡し、その
struct
として
void*
で、関数内で正しい型にキャストバックします。
関連
-
[解決済み】Valgrind - strcpyのサイズ1の無効な書き込み
-
[解決済み】C言語で「関数の型が競合しています」と表示される、なぜ?
-
[解決済み】式は、単純なポインタ演算を使用して完全なオブジェクト型へのポインタでなければなりません【重複】。
-
[解決済み】C言語で浮動小数点例外(コアダンプ)発生
-
[解決済み】「構造体でもユニオンでもないものにメンバー'*******'を要求する」とはどういう意味ですか?
-
[解決済み】ヒープ割り当てで初期化されていない値が作成された
-
[解決済み】サイズ8の無効な読み取り - Valgrind + C
-
[解決済み】fgetsによるセグメンテーションフォールト(コアダンプ) - と思う。
-
[解決済み] C: エラー: ';'トークンの前に ')' があると予想される
-
[解決済み] エラー: `itoa` はこのスコープで宣言されていません。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】 `S_ISREG()` とは何ですか、そして何をするのですか?
-
[解決済み】ポインタへの代入時に互換性のないポインタ型からの初期化警告が発生した
-
[解決済み】メモリー・クロバリング・エラー
-
[解決済み】C 未知の型名「my_structure」。
-
[解決済み】 「配列のイニシャライザーはイニシャライザーリストまたは文字列リテラルでなければなりません」と表示されるのですが?
-
[解決済み】「複数の定義」「最初に定義されたのはここです」エラーについて
-
[解決済み] エラー:整数が期待されるところで集約値が使用された
-
[解決済み】int型配列へのポインタのスカラ・イニシャライザの過剰要素
-
[解決済み】makefile:4。*** missing separator. 停止する
-
[解決済み】c - 警告:関数 'printf'の暗黙の宣言