Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
X
xv6-public
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
问题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
银宸时代
OS Lab Group
奖励实验
xv6-public
提交
629447fc
提交
629447fc
3月 20, 2012
创建
作者:
Silas Boyd-Wickizer
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
More wq tests
上级
e305634b
显示空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
54 行增加
和
12 行删除
+54
-12
wqtest.cc
bin/wqtest.cc
+54
-12
没有找到文件。
bin/wqtest.cc
浏览文件 @
629447fc
...
@@ -4,6 +4,16 @@
...
@@ -4,6 +4,16 @@
#include "amd64.h"
#include "amd64.h"
#include "wq.hh"
#include "wq.hh"
#define NEW_DELETE_OPS(classname) \
static void* operator new(unsigned long nbytes) { \
assert(nbytes == sizeof(classname)); \
return malloc(sizeof(classname)); \
} \
\
static void operator delete(void *p) { \
free(p); \
}
struct
testwork
:
public
work
{
struct
testwork
:
public
work
{
testwork
(
forframe
*
b
)
:
barrier_
(
b
)
{}
testwork
(
forframe
*
b
)
:
barrier_
(
b
)
{}
...
@@ -12,24 +22,17 @@ struct testwork : public work {
...
@@ -12,24 +22,17 @@ struct testwork : public work {
delete
this
;
delete
this
;
}
}
static
void
*
operator
new
(
unsigned
long
nbytes
)
{
NEW_DELETE_OPS
(
testwork
);
assert
(
nbytes
==
sizeof
(
testwork
));
return
xmalloc
(
sizeof
(
testwork
));
}
static
void
operator
delete
(
void
*
p
)
{
xfree
(
p
,
sizeof
(
testwork
));
}
struct
forframe
*
barrier_
;
struct
forframe
*
barrier_
;
};
};
static
void
static
void
test
(
void
)
test
0
(
void
)
{
{
enum
{
pushes
=
100
};
enum
{
pushes
=
100
};
struct
forframe
wqbarrier
(
pushes
);
struct
forframe
wqbarrier
(
pushes
);
printf
(
"test0...
\n
"
);
for
(
int
i
=
0
;
i
<
pushes
;
i
++
)
{
for
(
int
i
=
0
;
i
<
pushes
;
i
++
)
{
testwork
*
w
=
new
testwork
(
&
wqbarrier
);
testwork
*
w
=
new
testwork
(
&
wqbarrier
);
wq_push
(
w
);
wq_push
(
w
);
...
@@ -37,14 +40,53 @@ test(void)
...
@@ -37,14 +40,53 @@ test(void)
while
(
!
wqbarrier
.
zero
())
while
(
!
wqbarrier
.
zero
())
nop_pause
();
nop_pause
();
printf
(
"test0 done
\n
"
);
}
struct
forkwork
:
public
work
{
forkwork
(
forframe
*
b
)
:
barrier_
(
b
)
{}
virtual
void
run
()
{
int
pid
;
pid
=
fork
(
0
);
if
(
pid
<
0
)
die
(
"forkwork::run: fork"
);
else
if
(
pid
==
0
)
exit
();
wait
();
barrier_
->
dec
();
delete
this
;
}
NEW_DELETE_OPS
(
forkwork
);
struct
forframe
*
barrier_
;
};
static
void
testfork
(
void
)
{
enum
{
forks
=
100
};
struct
forframe
wqbarrier
(
forks
);
printf
(
"testfork...
\n
"
);
for
(
int
i
=
0
;
i
<
forks
;
i
++
)
{
forkwork
*
w
=
new
forkwork
(
&
wqbarrier
);
wq_push
(
w
);
}
while
(
!
wqbarrier
.
zero
())
nop_pause
();
printf
(
"testfork done
\n
"
);
}
}
int
int
main
(
int
ac
,
char
**
av
)
main
(
int
ac
,
char
**
av
)
{
{
initwq
();
initwq
();
test
();
test0
();
testfork
();
exitwq
();
exitwq
();
printf
(
"all done!
\n
"
);
return
0
;
return
0
;
}
}
编写
预览
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论