int main(int argc, char *argv[]) { acl_pthread_attr_t attr; acl_pthread_t t1, t2; ACL_YPIPE *ypipe = acl_ypipe_new(); int ch; while ((ch = getopt(argc, argv, "hn:b:")) > 0) { switch (ch) { case 'h': usage(argv[0]); return 0; case 'n': __max = atoi(optarg); break; case 'b': __base = atoi(optarg); break; default: break; } } memset(__dummy, 'x', sizeof(__dummy)); __dummy[sizeof(__dummy) - 1] = 0; acl_pthread_attr_init(&attr); acl_pthread_create(&t2, &attr, thread_consumer, ypipe); acl_pthread_create(&t1, &attr, thread_producer, ypipe); acl_pthread_join(t2, NULL); acl_pthread_join(t1, NULL); acl_ypipe_free(ypipe, NULL); printf("over\r\n"); return 0; }
/* 多线程方式 PING 多个目标地址,每个线程采用同步 PING 方式 */ static void ping_main_threads(const ACL_ARGV *ip_list, int npkt) { int i, n; acl_pthread_t tids[128]; acl_pthread_attr_t attr; __npkt = npkt; acl_pthread_attr_init(&attr); acl_pthread_attr_setdetachstate(&attr, 0); /* 限定每次最大的线程数,防止系统开销太大 */ n = ip_list->argc > 128 ? 128 : ip_list->argc; for (i = 0; i < n; i++) /* 创建 PING 线程 */ acl_pthread_create(&tids[i], &attr, ping_thread, ip_list->argv[i]); for (i = 0; i < n; i++) /* 回收线程状态 */ acl_pthread_join(tids[i], NULL); }
static void test_thread(void) { acl_pthread_t tid; acl_pthread_attr_t attr; THREAD_CTX ctx, *pctx; void *return_arg; unsigned int id; acl_pthread_mutex_lock(&mutex_init1); printf("lock mutex_init1 ok\n"); acl_pthread_mutex_lock(&mutex_init2); printf("lock mutex_init2 ok\n"); ctx.i = 0; acl_pthread_attr_init(&attr); acl_pthread_create(&tid, &attr, test_thread_fn, &ctx); acl_pthread_join(tid, (void**) &return_arg); pctx = (THREAD_CTX*) return_arg; memcpy(&id, &tid, sizeof(id)); printf("ctx.i=%d, pctx->i=%d, the thread id is: %u\r\n", ctx.i, pctx->i, id); }