Esempio n. 1
0
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;
}
Esempio n. 2
0
File: main.c Progetto: 10jschen/acl
/* 多线程方式 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);
}
Esempio n. 3
0
File: main.c Progetto: 10jschen/acl
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);
}