int main(int argc __attribute__((unused)), char **argv) { MY_INIT(argv[0]); if (argv[1] && *argv[1]) DBUG_SET_INITIAL(argv[1]); pthread_mutex_init(&mutex, 0); pthread_cond_init(&cond, 0); pthread_attr_init(&thr_attr); pthread_attr_setdetachstate(&thr_attr,PTHREAD_CREATE_DETACHED); #define CYCLES 3000 #define THREADS 30 diag("N CPUs: %d, atomic ops: %s", my_getncpus(), MY_ATOMIC_MODE); do_tests(); /* workaround until we know why it crashes randomly on some machine (BUG#22320). */ #ifdef NOT_USED sleep(2); #endif pthread_mutex_destroy(&mutex); pthread_cond_destroy(&cond); pthread_attr_destroy(&thr_attr); my_end(0); return exit_status(); }
/* checks that the current build of atomic ops can run on this machine RETURN ATOMIC_xxx values, see my_atomic.h */ int my_atomic_initialize() { compile_time_assert(sizeof(intptr) == sizeof(void *)); /* currently the only thing worth checking is SMP/UP issue */ #ifdef MY_ATOMIC_MODE_DUMMY return my_getncpus() == 1 ? MY_ATOMIC_OK : MY_ATOMIC_NOT_1CPU; #else return MY_ATOMIC_OK; #endif }
int main(int argc __attribute__((unused)), char **argv) { MY_INIT("thd_template"); if (argv[1] && *argv[1]) DBUG_SET_INITIAL(argv[1]); pthread_mutex_init(&mutex, 0); pthread_cond_init(&cond, 0); pthread_attr_init(&thr_attr); pthread_attr_setdetachstate(&thr_attr,PTHREAD_CREATE_DETACHED); #ifdef MY_ATOMIC_MODE_RWLOCKS #if defined(HPUX11) || defined(__POWERPC__) /* showed to be very slow (scheduler-related) */ #define CYCLES 300 #else #define CYCLES 3000 #endif #else #define CYCLES 3000 #endif #define THREADS 30 diag("N CPUs: %d, atomic ops: %s", my_getncpus(), MY_ATOMIC_MODE); do_tests(); /* workaround until we know why it crashes randomly on some machine (BUG#22320). */ sleep(2); pthread_mutex_destroy(&mutex); pthread_cond_destroy(&cond); pthread_attr_destroy(&thr_attr); my_end(0); return exit_status(); }