📄 spin.c
字号:
static char rcsid[] = "$Id: spin.c 6 2007-01-22 00:45:22Z drhanson $";#include <stdio.h>#include <stdlib.h>#include "assert.h"#include "fmt.h"#include "thread.h"#include "sem.h"#define NBUMP 30000struct args { Sem_T *mutex; int *ip;};int unsafe(void *cl) { int i, *ip = cl; for (i = 0; i < NBUMP; i++) *ip = *ip + 1; return EXIT_SUCCESS;}int safe(void *cl) { struct args *p = cl; int i; for (i = 0; i < NBUMP; i++) LOCK(*p->mutex) *p->ip = *p->ip + 1; END_LOCK; return EXIT_SUCCESS;}int n;int main(int argc, char *argv[]) { int m = 5, preempt; preempt = Thread_init(1, NULL); assert(preempt == 1); if (argc >= 2) m = atoi(argv[1]); n = 0; { int i; for (i = 0; i < m; i++) Thread_new(unsafe, &n, 0, NULL); Thread_join(NULL); } Fmt_print("%d == %d\n", n, NBUMP*m); n = 0; { 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;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -