A hack to get wq userspace threads to exit

上级 eecec35f
......@@ -74,5 +74,6 @@ main(int ac, char **av)
initwq();
printf("%ld\n", du(open(".", 0)));
wq_dump();
exitwq();
return 0;
}
......@@ -89,5 +89,6 @@ main(int argc, char *argv[])
}
wq_dump();
exitwq();
return 0;
}
......@@ -7,6 +7,7 @@ int wq_push(work *w);
void wq_dump(void);
size_t wq_size(void);
void initwq(void);
void exitwq(void);
struct work {
virtual void run() = 0;
......
......@@ -43,4 +43,9 @@ wqarch_init(void)
{
}
static inline void
wqarch_exit(void)
{
}
#define xprintf cprintf
......@@ -8,6 +8,7 @@
typedef struct uspinlock wqlock_t;
static pthread_key_t idkey;
static volatile int exiting;
int
mycpuid(void)
......@@ -58,7 +59,7 @@ workerth(void *x)
setaffinity(c);
pthread_setspecific(idkey, (void*)c);
while (1)
while (!exiting)
wq_trywork();
return 0;
......@@ -83,6 +84,12 @@ wqarch_init(void)
}
}
static inline void
wqarch_exit(void)
{
exiting = 1;
}
#define xprintf printf
#define pushcli()
#define popcli()
......@@ -73,6 +73,12 @@ initwq(void)
wqarch_init();
}
void
exitwq(void)
{
wqarch_exit();
}
//
// wq
//
......
......@@ -83,6 +83,11 @@ wqarch_init(void)
}
}
static inline void
wqarch_exit(void)
{
}
#define xprintf printf
#define pushcli()
#define popcli()
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论