blob: 4ae43950863d9b1949e7f13d36291c381530a9b8 [file] [log] [blame]
// PERMUTE_ARGS:
import core.stdc.stdio;
import core.thread;
version (CRuntime_DigitalMars)
{
extern (C)
{
extern int _tlsstart;
extern int _tlsend;
}
}
int tlsx;
class Foo
{
int x;
void bar()
{
printf("bar()\n");
assert(tlsx == 0);
tlsx = 5;
Thread t = Thread.getThis();
version (CRuntime_DigitalMars)
printf("thread ptr=%p, %p &tlsx = %p %p\n", t, &_tlsstart, &tlsx, &_tlsend);
x = 3;
printf("-bar()\n");
}
}
int main()
{
Foo f = new Foo();
Thread t = new Thread(&f.bar);
t.start();
printf("t.start() done\n");
// There is no analog for these in druntime.
//t.pause();
//t.resume();
Thread.yield();
t.join();
printf("Done waiting\n");
assert(f.x == 3);
int i;
Thread tx[5];
for (i = 0; i < tx.length; i++)
tx[i] = new Thread(&f.bar);
for (i = 0; i < tx.length; i++)
tx[i].start();
for (i = 0; i < tx.length; i++)
tx[i].join();
Thread.sleep(dur!"msecs"(1));
printf("**Success**\n");
return 0;
}