home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The C Users' Group Library 1994 August
/
wc-cdrom-cusersgrouplibrary-1994-08.iso
/
listings
/
v_03_02
/
3n02051a
< prev
next >
Wrap
Text File
|
1991-12-23
|
2KB
|
48 lines
// critsec.c example 2
// cl /AL /Lp critsec.c
// bind286 critsec
// critsec
#define INCL_DOS
#define INCL_SUB
#include <os2.h>
#include <malloc.h>
#define STACK_SIZE 4096
main()
{
char far *stkptr; /* stack pointer for threads */
void far thread1(); /* prototype for thread 1 */
void far thread2(); /* prototype for thread 2 */
unsigned threadID; /* thread ID number */
int count; /* loop counter */
int i = 400; /* note frequency */
stkptr = (char far *)malloc(STACK_SIZE) + STACK_SIZE; /* get stack space */
DosCreateThread(thread1, &threadID, stkptr); /* start thread one */
stkptr = (char far *)malloc(STACK_SIZE) + STACK_SIZE; /* get stack space */
DosCreateThread(thread2, &threadID, stkptr); /* start thread two */
DosSleep(400L); /* let other threads run */
DosEnterCritSec(); /* stop other threads */
printf("\nEntered critical section");
for(count=0; count <1; count++) { // beeping starts
for(; i < 800; i += 10)
DosBeep(i,50);
for(; i > 400; i -=5)
DosBeep(i,50);
} // beeping ends
printf(" Exited critical section\n");
DosExitCritSec(); /* start other threads again */
DosSleep(400L); /* let other threads continue */
exit(0); /* exit all threads */
}
void far thread1() { /* thread1() */
while(TRUE) /* continuously print "1" */
VioWrtTTY("1", 1, 0);
}
void far thread2() { /* thread2() */
while(TRUE) /* continuously print "2" */
VioWrtTTY("2", 1, 0);
}