13 create a thread with initial function fn(private)
15 static int proc_start(void *(*fn)(void *private))
18 pthread_attr_t thread_attr;
21 pthread_attr_init(&thread_attr);
22 pthread_attr_setdetachstate(&thread_attr, 0);
23 rc = pthread_create(&thread_id, &thread_attr, fn, NULL);
24 pthread_attr_destroy(&thread_attr);
26 return (int)thread_id;
29 /* wait for a thread to exit */
30 static int proc_join(int id)
32 return pthread_join(id, NULL);
39 create a thread with initial function fn(private)
41 static int proc_start(void *(*fn)(void *private))
53 static int proc_join(int id)
55 if (waitpid((pid_t)id, NULL, 0) != id) {
66 static void *proc_main(void *private)
72 for (i=1;i<NMALLOCS;i++) {
75 printf("malloc(%d) failed!\n", i);
79 for (i=1;i<NMALLOCS;i++) {
86 /* lock a byte range in a open file */
87 int main(int argc, char *argv[])
93 printf("malloc NPROCS\n");
97 nthreads = atoi(argv[1]);
99 ids = malloc(sizeof(*ids) * nthreads);
101 for (i=0;i<nthreads;i++) {
102 ids[i] = proc_start(proc_main);
105 for (i=0;i<nthreads;i++) {
107 rc = proc_join(ids[i]);
109 printf("Thread %d failed : %s\n", i, strerror(errno));