help-octave
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Threads in Octave


From: Ben Sapp
Subject: Re: Threads in Octave
Date: Mon, 26 Mar 2001 12:35:09 -0700

I tried to duplicate the problem in both IRIX 6.5.10 and also on a
GNU/RedHat Linux system 6.2  In both cases the octave test program
worked the way you wanted it to.  

>From Linux:
octave:1> thread_test
testing
testing
threads: 1026 1024 and the result is 0
Different threads!
octave:2> testing

>From IRIX:
octave:1> thread_test 
threads: 65537 65536 and the result is 0
testing
Different threads!
octave:2> testing

The only thing I changed in your source code was the name of the first
argument to DEFUN_DLD.  Try it on a different system maybe the system
you are testing it on has some funky configuration problem.  

Przemek Klosowski wrote:
> 
> We ran into a strange problem with pthreads in octave, while trying to
> implement an Octave GUI framework. After having weird synchronization
> errors, we have whittled it down to a short test case. A standalone
> program works as expected: a new thread is created and starts executing,
> and the original thread is distinguishable from the new one; the following
> source code:
> 
>     #include <string>
>     #include <strstream>
> 
>     #include <string.h>
>     #include <stdlib.h>
>     #include <unistd.h>
>     #include <signal.h>
>     #include <pthread.h>
> 
>     void *
>     my_thread_process(void * null){
>        while (1){
>           cout << "testing\n";
>           sleep(1);
>        }
>     }
>     int
>     pthread_equal_rig(   pthread_t t1,  pthread_t t2) {
>        int result;
>        cout << "threads: " << (int) t1 << " " << (int) t2 ;
>        result = pthread_equal(t1,t2);
>        cout << " and the result is " << result << "\n";
>        return result;
>     }
> 
>     int
>     main() {
>        pthread_t       my_thread;
>        pthread_create(&my_thread, NULL, my_thread_process, NULL);
> 
>        if(pthread_equal_rig(my_thread, pthread_self()))   cout << "Same 
> threads!\n";
>        else                                               cout << "Different 
> threads!\n";
>     }
> 
> when compiled with 'c++ -o test2 test2.c -lpthread' and run, outputs the 
> following:
> 
>     % ./test2
>     threads: 1026 1024 and the result is 0
>     Different threads!
>     testing
> 
> The same code implemented as Octave extension (Octave 2.1.33) runs,
> but the main process doesn't seem to return the correct thread ID from
> pthread_self(). Furthermore, we seem to have problems with thread
> synchronization (cut out from the above source), which we suspect are
> caused by confusion within the thread system.
> 
> The output in this case is:
> 
>     octave>  test
>     threads: 1026 0 and the result is 1
>     Same threads!
> 
> So, it appears that pthreads_self() is returning 0 instead of the
> thread ID for the parent (octave) process.  The source code in this
> case is almost exactly the same as the standalone code (see below)
> 
> So, did anyone play with Posix threads in Octave? Is our problem due
> to a conflict between pthreads and octave, or are we doing something
> wrong?
> 
>                         przemek klosowski, Ph.D. <address@hidden>  (301) 
> 975-6249
>                         NIST Center for Neutron Research (bldg. 235), E111
>                         National Institute of Standards and Technology
>                         Gaithersburg, MD 20899,      USA
>                         .. and for spam extractors, FCC Commisioners' email 
> is:
>                         
> address@hidden,address@hidden,address@hidden,address@hidden
>                         FTCtort: 202-326-2456 FTCIG: 202-326-2800 CybTip 
> 800-843-5678
> 
>     #include <octave/config.h>
>     #include <octave/oct-obj.h>
>     #include <octave/parse.h>
>     #include <octave/defun-dld.h>
>     #include <octave/error.h>
>     #include <octave/variables.h>
>     #include <octave/sighandlers.h>
>     #include <octave/mx-base.h>
> 
>     #include <string>
>     #include <strstream>
> 
>     #include <string.h>
>     #include <stdlib.h>
>     #include <unistd.h>
>     #include <signal.h>
>     #include <pthread.h>
> 
>     #define TRUE  1
>     #define FALSE 0
> 
>     void *
>     my_thread_process(void * null){
>        while (1){
>           cout << "testing\n";
>           sleep(1);
>        }
>     }
>     int
>     pthread_equal_rig(   pthread_t t1,  pthread_t t2) {
>        int result;
>        cout << "threads: " << (int) t1 << " " << (int) t2 ;
>        result = pthread_equal(t1,t2);
>        cout << " and the result is " << result << "\n";
>        return result;
>     }
> 
>     DEFUN_DLD (test, args,, "test")
>     {
>        octave_value_list ret;
> 
>        pthread_t       my_thread;
>        pthread_create(&my_thread, NULL, my_thread_process, NULL);
> 
>        if(pthread_equal_rig(my_thread, pthread_self()))        printf("Same 
> threads!\n");
>        else                                                    
> printf("Different threads!\n");
> 
>        return ret;
>     }
> 
> -------------------------------------------------------------
> Octave is freely available under the terms of the GNU GPL.
> 
> Octave's home on the web:  http://www.octave.org
> How to fund new projects:  http://www.octave.org/funding.html
> Subscription information:  http://www.octave.org/archive.html
> -------------------------------------------------------------

-- 
Ben Sapp                         Los Alamos National Laboratory
email: <mailto:address@hidden>   Phone: (505)667-3277
Fax:   (505)665-7920             URL:   http://www.neutrino.lanl.gov/
--



-------------------------------------------------------------
Octave is freely available under the terms of the GNU GPL.

Octave's home on the web:  http://www.octave.org
How to fund new projects:  http://www.octave.org/funding.html
Subscription information:  http://www.octave.org/archive.html
-------------------------------------------------------------



reply via email to

[Prev in Thread] Current Thread [Next in Thread]