Exemple #1
0
int apply(void *p){
	TRY
		...
	EXCEPT (Thread_Alerted)
		Thread_exit(EXIT_FAILURE);
	END_TRY;
	Thread_exit(EXIT_SUCCESS);
}
Exemple #2
0
static unsigned __stdcall start(void *p) {
	T t = p;

	Except_stack = NULL;
	Thread_exit((*t->apply)(t->args));
	return 0;
}
Exemple #3
0
    void *Thread::entryPoint(void *threadp)
    {
        Thread *thread=(Thread *)threadp;

        thread->m_alive=true;
        thread->m_id=(unsigned int)Thread_currentThread();
        thread->run();
        thread->m_alive=false;

        Thread_exit();
    }
Exemple #4
0
int main(int argc, char *argv[]) {
        struct args args;

        Thread_init();
        args.c = Chan_new();
        Thread_new((int (*)(void *))source, &args, sizeof args, NULL);
        args.n      = argc > 2 ? atoi(argv[2]) : 5;
        args.nprime = argc > 1 ? atoi(argv[1]) : 100;
        Thread_new((int (*)(void *))sink,   &args, sizeof args, NULL);
        Thread_exit(0);
        return 0;
}
Exemple #5
0
int main(int argc, char* argv[])
{
    struct args args;
    Thread_init(1, NULL);
    args.c = Chan_new();
    Thread_new(source, &args, sizeof args, NULL);
    args.n    = argc > 2 ? atoi(argv[2]) : 5;
    args.last = argc > 1 ? atoi(argv[1]) : 1000;
    Thread_new(sink,   &args, sizeof args, NULL);
    Thread_exit(EXIT_SUCCESS);
    return EXIT_SUCCESS;
}
Exemple #6
0
main(int argc, char *argv[]) {
	int i, n = 100000, *x, preempt;
	preempt = Thread_init(1, NULL);
	assert(preempt == 1);
	if (argc >= 2)
		n = atoi(argv[1]);
	x = CALLOC(n, sizeof (int));
	srand(time(NULL));
	for (i = 0; i < n; i++)
		x[i] = rand();
	sort(x, n, argc, argv);
	for (i = 1; i < n; i++)
		if (x[i] < x[i-1])
			break;
	assert(i == n);
	Thread_exit(EXIT_SUCCESS);
	return EXIT_SUCCESS;
}
Exemple #7
0
int main(int argc, char *argv[]){
	int m = 5;
	int preempt;
	
	preempt = Thread_init(1, NULL);
	assert(preempt == 1);
	if (argc >= 2){
		m = atoi(argv[1]);
	}
	n = 0;
	// increment n unsafely
	{
		int i;
		for (i = 0; i < m; i++){
			Thread_new(unsafe, &n, 0, NULL);	// 创建m个线程
		}
		Thread_join(NULL);
	}
	
	Fmt_print("%d == %d\n", n, NBUMP * m);
	
	n = 0;
	// increment n safely
	{
		int i;
		struct args args;
		Sem_T mutex;
		Sem_init(&mutex, 1);
		args.mutex = &mutex;
		args.ip = &n;
		for (i = 0; i < m; i++){
			Thread_new(safe, &args, sizeof(args), NULL);
		}
		Thread_join(NULL);
	}
	
	Fmt_print("%d == %d\n", n, NBUMP * m);
	Thread_exit(EXIT_SUCCESS);
	
	return EXIT_SUCCESS;
}
Exemple #8
0
int main(int argc, char *argv[]) {
        int i, j;
        int m = argc > 1 ? atoi(argv[1]) : 4;
        int n = argc > 2 ? atoi(argv[2]) : 3;

        Thread_init();
        Sem_init(&mutex, 1);
        for (j = 0; j < n; j++) {
                struct args args;
                args.mutex = &mutex;
                args.ip = &y;
                for (i = 0; i < m; i++)
                        Thread_new((int (*)(void *))incr, &args, sizeof args, NULL);
                Thread_join(0);
                if (y != m*10000)
                        printf("%d:%d\n", j, y);
                y = 0;
        }
        Thread_exit(0);
        return 0;
}