6

ユーザーが指定した数のスレッドを作成したい。このために私が書いたコードは次のとおりです。

int nhijos = atoi(argv[1]);

thread = malloc(sizeof(pthread_t)*nhijos);

for (i = 0; i < nhijos; i++){
  if (pthread_create ( &thread[i], NULL, &hilos_hijos, (void*) &info ) != 0){
  perror("Error al crear el hilo. \n");
  exit(EXIT_FAILURE);
}   

これは正しいです?

4

2 に答える 2

7

はい。ただし、次のことを行います。

  1. atoi(argv[1]) を呼び出す前に argc > 1 であることを検証します

  2. numberOfThreads が正の数であり、妥当な範囲よりも小さいことを検証します。(ユーザーが 1000000 を入力した場合)。

  3. malloc からの戻り値が null でないことを検証します。

  4. pthread_create は、失敗時に errno を設定しません。そのため、perror は失敗時に呼び出す適切な関数ではない可能性があります。

...

if (argc > 1)
{
    int numberOfThreads = atoi(argv[1]); 
    if ((numberOfThreads <= 0) || (numberOfThreads > REASONABLE_THREAD_MAX))
    {
        printf("invalid argument for thread count\n");
        exit(EXIT_FAILURE);
    }
 
    thread = malloc(sizeof(pthread_t)*numberOfThreads); 
    if (thread == NULL)
    {
       printf("out of memory\n");
       exit(EXIT_FAILURE);
    }

    for (i = 0; i < numberOfThreads; i++)
    { 
        if (pthread_create ( &thread[i], NULL, &hilos_hijos, (void*) &info ) != 0)
        { 
            printf("Error al crear el hilo. \n"); 
            exit(EXIT_FAILURE); 
        }    
    }
于 2012-06-22T17:08:32.863 に答える
3
#include<stdio.h>
#include<pthread.h>

void* thread_function(void)
{
    printf("hello");
}
int main(int argc,char *argv[])
{
    int noOfThread= atoi(argv[1]);
    pthread_t thread_id[noOfThread];
    int i;
    int status;
    for(i=0;i<noOfThread;i++)
    {
        pthread_create (&thread_id[i], NULL , &thread_function, NULL);
    }  

    for(i=0;i<noOfThread;i++)
        pthread_join(thread_id[i],NULL);   
}

これをコンパイルして次のように実行します

./a.exe 3

したがって、3つのスレッドが作成されます


あなたのコードで

1> なぜ malloc するのですか?

2> mallocの場合、なぜそれを解放しないのですか?

于 2012-06-22T17:06:22.137 に答える