-
-
-/*******************************************************************************/
-/*******************************************************************************/
-/*******************************************************************************/
-#include "xbt/synchro.h"
-static void pusher_f(void *a)
-{
- xbt_dynar_t d = (xbt_dynar_t) a;
- int i;
- for (i = 0; i < 500; i++) {
- xbt_dynar_push(d, &i);
- }
-}
-
-static void poper_f(void *a)
-{
- xbt_dynar_t d = (xbt_dynar_t) a;
- int i;
- int data;
- xbt_ex_t e;
-
- for (i = 0; i < 500; i++) {
- TRY {
- xbt_dynar_pop(d, &data);
- }
- CATCH(e) {
- if (e.category == bound_error) {
- xbt_ex_free(e);
- i--;
- } else {
- RETHROW;
- }
- }
- }
-}
-
-
-XBT_TEST_UNIT("synchronized int", test_dynar_sync_int, "Synchronized dynars of integers")
-{
- /* Vars_decl [doxygen cruft] */
- xbt_dynar_t d;
- xbt_thread_t pusher, poper;
-
- xbt_test_add0("==== Have a pusher and a popper on the dynar");
- d = xbt_dynar_new_sync(sizeof(int), NULL);
- pusher = xbt_thread_create("pusher", pusher_f, d, 0 /*not joinable */ );
- poper = xbt_thread_create("poper", poper_f, d, 0 /*not joinable */ );
- xbt_thread_join(pusher);
- xbt_thread_join(poper);
- xbt_dynar_free(&d);
-}
-