0

私の質問はこれです。私はこのコードを持っています:

#include<stdio.h>
#include<semaphore.h>
#include<pthread.h>
    int number;
   pthread_mutex_t mutex[number];
   pthread_t threads[number];


void *dosomething(void *num)
{
   int *i=num;
   pthread_mutex_lock(&mutex[i]);
    //dosomething
   pthread_mutex_unlock(&mutex[i]);
}


int main(int argc, char *argv[]) //<-- main
{

    printf("How many threads do you want?");
     scanf("%d",&number);

     int rc,t;
   for(t=1;t<number;t++){
     pthread_mutex_init(&mutex[t],NULL);
     printf("In main: creating thread %d \n", t);
     rc = pthread_create(&threads[t], NULL, philospher,(void *)t);
            }

     if (rc){
       printf("ERROR; return code from pthread_create() is %d\n",rc);

      exit(0);
            }


   pthread_exit(NULL);
}

コンパイルしようとすると、ファイルスコープで可変的に変更された「ミューテックス」/ファイルスコープで可変的に変更された「スレッド」と表示されます。ユーザーが定義した多数のミューテックスとスレッドを作成し、作成されたすべてのスレッドから利用できるようにしたいだけです。

4

1 に答える 1

0

ここに部分的な答えがあります。投稿されたコードには他のエラー (ポインターをインデックスとして使用するなど) があり、次のコードには最小限のエラー処理しか含まれていないことに注意してください。それらの詳細を整理させていただきます。

// ...

int number;
pthread_mutex_t* mutex;  // declare as pointers instead of arrays
pthread_t* threads;      //    so they can be dynamically sized

void alloc_thread_info(int number)
{
    int i;

    // allocate the arrays with the requested size

    mutex = calloc( number, sizeof(*mutex));
    threads = calloc(number, sizeof(*threads));

    if (!mutex || !threads) {
        abort();
    }

    for (i = 0; i < number; ++i) {
        pthread_mutex_init( &mutex[i]);
    }

    return;    
}
于 2013-01-03T22:14:08.240 に答える