Exemple #1
0
int
main()
{
	pthread_t threads[T];
	int i, j;

	for (j = 0; j < T; j++) {
		for (i = 0; i < N; i++) {
			data[j][i].satelite = N * j + i;
			LL_INIT_ENTRY(&data[j][i].entry);
			LL_PUSH_BACK(objlist, &list, &data[j][i]);
		}
	}

	must_succeed(pthread_barrier_init(&barrier, NULL, T + 1),
	    "pthread_barrier_init");

	for (i = 0; i < T; i++) {
		must_succeed(pthread_create(&threads[i], NULL,
		    (i < N / 2 ? &rm_thread_forward : &rm_thread_backward),
		    data[i]), "pthread_create");
	}
	must_succeed(barrier_wait(&barrier), "pthread_barrier_wait");

	for (i = 0; i < T; i++)
		must_succeed(pthread_join(threads[i], NULL), "pthread_join");
	must_succeed(pthread_barrier_destroy(&barrier),
	    "pthread_barrier_destroy");

	assert(LL_EMPTY(objlist, &list));
	return 0;
}
static void generate_system_random_bytes(size_t n, void *result) {
  HCRYPTPROV prov;
#define must_succeed(x) do if (!(x)) assert(0); while (0)
  must_succeed(CryptAcquireContext(&prov, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT | CRYPT_SILENT));
  must_succeed(CryptGenRandom(prov, (DWORD)n, result));
  must_succeed(CryptReleaseContext(prov, 0));
#undef must_succeed
}
Exemple #3
0
void*
rm_thread_backward(void *objs_ptr)
{
	struct obj *objs = objs_ptr;
	int i;

	for (i = 0; i < N; i++)
		LL_REF(objlist, &list, &objs[i]);
	must_succeed(barrier_wait(&barrier), "pthread_barrier_wait");

	for (i = N - 1; i >= 0; i--) {
		if (!LL_UNLINK(objlist, &list, &objs[i]))
			unlink_fail(&objs[i]);
	}
	return NULL;
}