::: 강좌/소스/문서 :::

강좌/소스/문서 성격에 맞지 않는 광고,비방,질문의 글은 즉시 삭제하며
내용을 복사하여 사용할 경우 반드시 이곳(http://www.howto.pe.kr)을 출처로 명시하여 주세요


Category

  김영대(2003-03-17 02:00:35, Hit : 5595, Vote : 1527
 [Thread] pthread_once() function

/***************************************************
*--------------------------------------------------
*   Creat  : 2001. 04. 10  (programed by Cori-Young )
*   Site: http://www.byoneself.co.kr
*   Update :
*--------------------------------------------------
*   Compile : cc -o xxx xxx.c -lpthread -lrt
*--------------------------------------------------
* Machine hardware:   sun4u
* OS version:         5.7
* Processor type:     sparc
* Hardware:           SUNW,Ultra-60
***************************************************/


#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <pthread.h>
#include <stdio.h>

#define _MULTI_THREADED
#define         NUMTHREADS    3

static void checkResults(char *string, int rc) {

  if (rc) {
    printf("Error on : %s, rc=%d", string, rc);
    exit(EXIT_FAILURE);
  }
  return;
}

int             number      = 0;
int             okStatus    = 777;

pthread_once_t  onceControl = PTHREAD_ONCE_INIT;

void initRoutine(void)
{
  printf("In the initRoutinen");
  number++;
}

void *threadfunc(void *parm)
{

  printf("Inside secondary threadn");

  pthread_once(&onceControl, initRoutine);
  return (void *)(okStatus);
}

int main(int argc, char **argv)
{

  pthread_t             thread[NUMTHREADS];
  int                   rc=0;
  int                   i=NUMTHREADS;
  void                 *status;

  printf("Enter Testcase - %sn", argv[0]);

  for (i=0; i < NUMTHREADS; ++i) {
    printf("Create thread %dn", i);

    rc = pthread_create(&thread[i], NULL, threadfunc, NULL);
    checkResults("pthread_create()n", rc);
  }

  for (i=0; i < NUMTHREADS; ++i) {

    printf("Wait for thread %dn", i);

    rc = pthread_join(thread[i], &status);
    checkResults("pthread_join()n", rc);

    if ((status) != (int *)okStatus) {
      printf("Secondary thread failedn");
      exit(1);
    }
  }

  if (number != 1) {
    printf("An incorrect number of 1 one-time init routine was called!n");
    exit(1);
  }

  printf("One-time init routine called exactly oncen");
  printf("Main completedn");

  return 0;

}





62   [Unix/Linux] [강좌] 인텔 센트리노 무선랜 카드: ndiswrapper  김영대 2004/06/27 11278 2018
61   [Unix/Linux] [Thread] pthread_cond_timedwait() function  김영대 2003/03/17 5945 1770
60   [Unix/Linux] [Thread] pthread_setschedparam() function  김영대 2003/03/17 9779 1691
59   [Unix/Linux] [Thread] pthread_cancel() function  김영대 2003/03/17 5869 1681
58   [Unix/Linux] [System V IPC] shmget() function - 공유메모리  김영대 2003/03/17 9870 1670
57   [Unix/Linux] [POSIX IPC] mq_receive() function - 메세지큐  김영대 2003/03/17 6884 1667
56   [Unix/Linux] [System V IPC] msgrcv() function - 메세지큐  김영대 2003/03/17 6308 1622
55   [Unix/Linux] [Thread] pthread_cond() function  김영대 2003/03/17 6023 1606
54   [Unix/Linux] [System V IPC] shmctl() function - 공유메모리  김영대 2003/03/17 7623 1602
53   [Unix/Linux] [POSIX IPC] mq_send() function - 메세지큐  김영대 2003/03/17 8468 1585
52   [Unix/Linux] [Thread] pthread_mutexattr_init() function  김영대 2003/03/17 5736 1569
51   [Unix/Linux] [System V IPC] semget() function - 세마포어  김영대 2003/03/17 5876 1567
50   [Unix/Linux] [Thread] pthread_attr_getinheritsched() function  김영대 2003/03/17 4973 1551
49   [Unix/Linux] [System V IPC] msgsnd() function - 메세지큐  김영대 2003/03/17 7624 1547
48   [Unix/Linux] [POSIX IPC] 생산자/소비자 - 세마포어  김영대 2003/03/17 7272 1531
  [Unix/Linux] [Thread] pthread_once() function  김영대 2003/03/17 5595 1527
46   [Unix/Linux] [Thread] pthread_attr_setdetachstate() function  김영대 2003/03/17 5304 1522
45   [Unix/Linux] [Thread] pthread_cond_init() function  김영대 2003/03/17 5451 1502
44   [Unix/Linux] [Thread] pthread_attr_destroy() function  김영대 2003/03/17 5435 1491
43   [Unix/Linux] [System V IPC] msgget() function - 메세지큐  김영대 2003/03/17 5785 1486

1 [2][3][4]
 

Copyright 1999-2019 Zeroboard / skin by zero