Lightweight Processes on SunOS4.0
Ari Gross
sylvester!ari at columbia.edu
Fri Nov 24 09:18:18 AEST 1989
There seems to be a problem with the printf command when using the
lightweight process library. Here is an example taken from the SUN
tutorial document on lightweight processes (Ch 6, pgs 75-76) that is
supposed to give an example of how threads can be used to run coroutines.
If the string constants in the example are replaced with integer
variables, the code compiles and runs properly, as in the tutorial
example. If the constants are changed to floats however, as below, the
program hangs. It looks like there is a problem with the print command
when used with threads. Any suggestions ??? [BTW, I am running this on a
SUN 3.]
Ari Gross
ari at cs.columbia.edu
/* buggy coroutine code using threads */
#include <lwp/lwp.h>
#include <lwp/stackdep.h>
thread_t co1;
thread_t co2;
thread_t co3;
main()
{
float num1;
int coroutine(), other();
lwp_self(&co1);
lwp_setstkcache(1000,3);
lwp_create(&co2, coroutine, MINPRIO, 0, lwp_newstk(), 0);
lwp_create(&co3, other, MINPRIO, 0, lwp_newstk(), 0);
num1 = 1.0;
printf("%f\n",num1);
lwp_yield(THREADNULL);
num1 = 4.0;
printf("%f\n",num1);
lwp_yield(co3);
num1 = 6.0;
printf("%f\n",num1);
exit(0);
}
coroutine() {
float num2;
num2 = 2.0;
printf("%f\n",num2);
if (lwp_yield(THREADNULL) < 0) {
lwp_perror("bad yield");
return;
}
num2 = 7.0;
printf("%f\n",num2);
}
other() {
float num3;
num3 = 3.0;
printf("%f\n",num3);
lwp_yield(THREADNULL);
num3 = 5.0;
printf("%f\n",num3);
}
/* end code */
More information about the Comp.sys.sun
mailing list