int main() { int i; pthread_t thread; pthread_barrier_init(&sBarrier, NULL, 2); pthread_key_create(&sKey, cleanupProc); pthread_create(&thread, NULL, threadProc, (void *)78); pthread_setspecific(sKey, (void *)42); pthread_barrier_wait(&sBarrier); #ifdef __AVM2__ { unsigned dummy; avm2_self_msleep(&dummy, 100); } #endif for(i = 0; i < 5; i++) { printf("main specific: %d\n", (int)pthread_getspecific(sKey)); #ifdef __AVM2__ if(i < 3) printf("impersonate specific: %d\n", (int)avm2_thr_impersonate(sTid, getspecThunk, &sKey)); #endif delaySome(); } pthread_join(thread, NULL); pthread_key_delete(sKey); return 0; }
static void *threadProc(void *arg) { inline_as3("this[\"abc\"]=3333;"); avm2_self_msleep((void*)&main_tid, 10); avm2_thr_impersonate(main_tid,print,NULL); avm2_wake((void*)&main_tid); // printf("thread. main id is %d\n",main_tid); // avm2_ui_thunk(print, NULL); return NULL; }
static void delaySome() { #ifdef __AVM2__ unsigned dummy; avm2_self_msleep(&dummy, 300); #else sleep(1); #endif }
int main() { pthread_t thread; long id; thr_self(&id); pthread_create(&thread, NULL, threadProc, (void *)id); tprintf("sleeping!\n"); avm2_self_msleep(&cond, 0); tprintf("ok!\n"); pthread_join(thread, NULL); return 0; }