#include <u.h>
#include <libc.h>
#include "mcslock.h"
enum {
N = 1 * 1000*1000,
};
extern void ·mcslock(Lock *, Qnode*);
extern void ·mcsunlock(Lock *L, Qnode *l);
Lock sem1;
uchar buffer[128];
enum {
Cacheline = 64,
};
int
max(int x, int y)
{
if(x>y)
return x;
return y;
}
void
thread(void)
{
int i;
Qnode *q;
q = mallocz(max(Cacheline, sizeof q), 1);
for(i = 0; i < N; i++){
·mcslock(&sem1, q);
·mcsunlock(&sem1, q);
}
}
void
main(void)
{
switch(rfork(RFPROC|RFMEM)){
case -1:
sysfatal("fork: %r");
case 0:
thread();
exits("");
default:
thread();
wait();
exits("");
}
}
|