Esempio n. 1
0
File: main.c Progetto: patriot7/lwt
void
test_crt_join_sched(void)
{
	lwt_t chld1, chld2;

	printf("[TEST] thread creation/join/scheduling\n");

	/* functional tests: scheduling */
	lwt_yield(LWT_NULL);

	lwt_chan_t c1 = lwt_chan(0);
	chld1 = lwt_create(fn_sequence, (void*)1, 0, c1);
	lwt_chan_t c2 = lwt_chan(0);
	chld2 = lwt_create(fn_sequence, (void*)2, 0, c2);
	lwt_join(chld2);
	lwt_join(chld1);	
	IS_RESET();

	/* functional tests: join */
	lwt_chan_t c3 = lwt_chan(0);
	chld1 = lwt_create(fn_null, NULL, 0, c3);
	lwt_join(chld1);
	IS_RESET();

	lwt_chan_t c4 = lwt_chan(0);
	chld1 = lwt_create(fn_null, NULL, 0, c4);
	lwt_yield(LWT_NULL);
	lwt_join(chld1);
	IS_RESET();

	lwt_chan_t c5 = lwt_chan(0);
	chld1 = lwt_create(fn_nested_joins, NULL, 0, c5);
	lwt_join(chld1);
	IS_RESET();

	/* functional tests: join only from parents */
	lwt_chan_t c6 = lwt_chan(0);
	chld1 = lwt_create(fn_identity, (void*)0x37337, 0, c6);
	lwt_chan_t c7 = lwt_chan(0);
	chld2 = lwt_create(fn_join, chld1, 0, c7);
	lwt_yield(LWT_NULL);
	lwt_yield(LWT_NULL);
	lwt_join(chld2);
	lwt_join(chld1);
	IS_RESET();

	/* functional tests: passing data between threads */
	lwt_chan_t c8 = lwt_chan(0);
	chld1 = lwt_create(fn_identity, (void*)0x37337, 0, c8);
	assert((void*)0x37337 == lwt_join(chld1));
	IS_RESET();

	/* functional tests: directed yield */
	lwt_chan_t c9 = lwt_chan(0);
	chld1 = lwt_create(fn_null, NULL, 0, c9);
	lwt_yield(chld1);
	assert(lwt_info(LWT_INFO_NTHD_ZOMBIES) == 1);
	lwt_join(chld1);
	IS_RESET();
}
Esempio n. 2
0
File: main.c Progetto: kalmuthu/lwt
void *
fn_nested_joins(void *d)
{
	lwt_t chld;

	if (d) {
		lwt_yield(LWT_NULL);
		lwt_yield(LWT_NULL);
		assert(lwt_info(LWT_INFO_NTHD_RUNNABLE) == 1);
		lwt_die(NULL);
	}
	chld = lwt_create(fn_nested_joins, (void*)1);
	lwt_join(chld);
}
Esempio n. 3
0
File: main.c Progetto: kalmuthu/lwt
void
test_crt_join_sched(void)
{
	lwt_t chld1, chld2;

	/* functional tests: scheduling */
	lwt_yield(LWT_NULL);

	chld1 = lwt_create(fn_sequence, (void*)1);
	chld2 = lwt_create(fn_sequence, (void*)2);
	lwt_join(chld2);
	lwt_join(chld1);	
	IS_RESET();

	/* functional tests: join */
	chld1 = lwt_create(fn_null, NULL);
	lwt_join(chld1);
	IS_RESET();

	chld1 = lwt_create(fn_null, NULL);
	lwt_yield(LWT_NULL);
	lwt_join(chld1);
	IS_RESET();

	chld1 = lwt_create(fn_nested_joins, NULL);
	lwt_join(chld1);
	IS_RESET();

	/* functional tests: join only from parents */
	chld1 = lwt_create(fn_identity, (void*)0x37337);
	chld2 = lwt_create(fn_join, chld1);
	lwt_yield(LWT_NULL);
	lwt_yield(LWT_NULL);
	lwt_join(chld2);
	lwt_join(chld1);
	IS_RESET();

	/* functional tests: passing data between threads */
	chld1 = lwt_create(fn_identity, (void*)0x37337);
	assert((void*)0x37337 == lwt_join(chld1));
	IS_RESET();

	/* functional tests: directed yield */
	chld1 = lwt_create(fn_null, NULL);
	lwt_yield(chld1);
	assert(lwt_info(LWT_INFO_NTHD_ZOMBIES) == 1);
	lwt_join(chld1);
	IS_RESET();
}
Esempio n. 4
0
File: main.c Progetto: patriot7/lwt
void
test_perf_async_steam(int chsz)
{
	lwt_chan_t from;
	lwt_t t;
	int i;
	unsigned long long start, end;

	async_sz = chsz;
	assert(RUNNABLE == lwt_current()->state);
	from = lwt_chan(chsz);
	assert(from);
	lwt_chan_grant(from);
	lwt_chan_t cfix = lwt_chan(0);
	t = lwt_create(fn_async_steam, from, 0, cfix);
	assert(lwt_info(LWT_INFO_NTHD_RUNNABLE) == 2);
	rdtscll(start);
	for (i = 0 ; i < ITER ; i++) assert(i+1 == (int)lwt_rcv(from));
	rdtscll(end);
	printf("[PERF] %lld <- asynchronous snd->rcv (buffer size %d)\n",
	       (end-start)/(ITER*2), chsz);
	lwt_join(t);
}