/***************************************************
*--------------------------------------------------
* 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
static void checkResults(char *string, int rc) {
if (rc) {
printf("Error on : %s, rc=%d", string, rc);
exit(EXIT_FAILURE);
}
return;
}
typedef struct {
int value;
char string[128];
} thread_parm_t;
void *threadfunc(void *parm)
{
thread_parm_t *p = (thread_parm_t *)parm;
printf("%s, parm = %dn", p->string, p->value);
free(p);
return NULL;
}
int main(int argc, char **argv)
{
pthread_t thread;
int rc=0;
pthread_attr_t pta;
thread_parm_t *parm=NULL;
printf("Enter Testcase - %sn", argv[0]);
printf("Create a thread attributes objectn");
rc = pthread_attr_init(&pta);
checkResults("pthread_attr_init()n", rc);
/* Create 2 threads using default attributes in different ways */
printf("Create thread using the NULL attributesn");
/* Set up multiple parameters to pass to the thread */
parm = malloc(sizeof(thread_parm_t));
parm->value = 5;
strcpy(parm->string, "Inside secondary thread");
rc = pthread_create(&thread, NULL, threadfunc, (void *)parm);
checkResults("pthread_create(NULL)n", rc);
printf("Create thread using the default attributesn");
/* Set up multiple parameters to pass to the thread */
parm = malloc(sizeof(thread_parm_t));
parm->value = 77;
strcpy(parm->string, "Inside secondary thread");
rc = pthread_create(&thread, &pta, threadfunc, (void *)parm);
checkResults("pthread_create(&pta)n", rc);
printf("Destroy thread attributes objectn");
rc = pthread_attr_destroy(&pta);
checkResults("pthread_attr_destroy()n", rc);
/* sleep() isn't a very robust way to wait for the thread */
sleep(5);
printf("Main completedn");
return 0;
} |
|