Posix threads


 
Thread Tools Search this Thread
Top Forums UNIX for Advanced & Expert Users Posix threads
# 1  
Old 04-29-2009
Posix threads

Hi,
consider the code below:

Code:
#include <stdio.h>
      .
      .

struct myStruct
{  
   char *message ;
   int id;
 };
     .    
     .
     .
void *thread_function( void *ptr );
nt main()
{
     pthread_t thread1, thread2 ,thread3 ;
     struct myStruct nico1;
     struct myStruct nico2;
     struct myStruct nico3;
     nico1.message="Thread1";
     nico1.id=0;
     nico2.message="Thread 2";
     nico2.id=1;
     nico3.message="Thread 3";
     nico3.id=2;
     int  iret1, iret2,iret3;
 
     iret1 = pthread_create( &thread1, NULL, thread_function, (void*)&nico1);
     iret2 = pthread_create( &thread2, NULL, thread_function, (void*)&nico2 );
     iret3= pthread_create( &thread3, NULL, thread_function, (void*)&nico3);
       .
       .
       .
     pthread_join( thread1, NULL);
     pthread_join( thread2, NULL);
     pthread_join( thread3, NULL); 
     
     exit(0);
}


void *thread_function( void *ptr )
{
    int k,j;
    struct myStruct *nico;
         nico=( struct myStruct*)ptr;
    k=1;
    while(k<10)
    {
        printf(" THREAD # %d \n", nico->id);
        printf("****************** \n ******************");
        printf("                    \n ");
        printf("in loop while k=%d : \n ",k);
        printf("                    \n ");
        printf("                    \n ");
        
        
        //then for j=1,...,k-1
                for(j=(nico->id); j<k; j+=3)  //Start at 0 for C
                {
            
            
            printf(" in loop for j=%d : \n ",j);
            printf("                    \n ");
    
                }
        
        
        k=k+1;
    }
 return NULL;
}

so I expected that theses three threads execute in parallel,and therfore in
I expected to have mixed displays of threads in terminal .but after the execution I have a regular display of threads,i.e. thread 1 prints all its
while loop(from 1 to 9),after thread 2 ,and after thread3 it seems that there
is no parallel execution of these threads,I try to increase the number
of iteration of loop while to 100 but nothing changes.
Any thoughts?
(I am using a multiprocessor machine and Kubuntu)

here is example of the execution:

THREAD # 0
******************
******************
in loop while k=1 :


in loop for j=0 :

THREAD # 0
******************
******************
in loop while k=2 :


in loop for j=0 :

THREAD # 0
******************
******************
in loop while k=3 :


in loop for j=0 :

THREAD # 0
******************
******************
in loop while k=4 :


in loop for j=0 :

in loop for j=3 :

THREAD # 0
******************
******************
in loop while k=5 :


in loop for j=0 :

in loop for j=3 :

THREAD # 0
******************
******************
in loop while k=6 :


in loop for j=0 :

in loop for j=3 :

THREAD # 0
******************
******************
in loop while k=7 :


in loop for j=0 :

in loop for j=3 :

in loop for j=6 :

THREAD # 0
******************
******************
in loop while k=8 :


in loop for j=0 :

in loop for j=3 :

in loop for j=6 :

THREAD # 0
******************
******************
in loop while k=9 :


in loop for j=0 :

in loop for j=3 :

in loop for j=6 :

THREAD # 1
******************
******************
in loop while k=1 :


THREAD # 1
******************
******************
in loop while k=2 :


in loop for j=1 :

THREAD # 1
******************
******************
in loop while k=3 :


in loop for j=1 :

THREAD # 1
******************
******************
in loop while k=4 :


in loop for j=1 :

THREAD # 1
******************
******************
in loop while k=5 :


in loop for j=1 :

in loop for j=4 :

THREAD # 1
******************
******************
in loop while k=6 :


in loop for j=1 :

in loop for j=4 :

THREAD # 1
******************
******************
in loop while k=7 :


in loop for j=1 :

in loop for j=4 :

THREAD # 1
******************
******************
in loop while k=8 :


in loop for j=1 :

in loop for j=4 :

in loop for j=7 :

THREAD # 1
******************
******************
in loop while k=9 :


in loop for j=1 :

in loop for j=4 :

in loop for j=7 :

THREAD # 2
******************
******************
in loop while k=1 :


THREAD # 2
******************
******************
in loop while k=2 :


THREAD # 2
******************
******************
in loop while k=3 :


in loop for j=2 :

THREAD # 2
******************
******************
in loop while k=4 :


in loop for j=2 :

THREAD # 2
******************
******************
in loop while k=5 :


in loop for j=2 :

THREAD # 2
******************
******************
in loop while k=6 :


in loop for j=2 :

in loop for j=5 :

THREAD # 2
******************
******************
in loop while k=7 :


in loop for j=2 :

in loop for j=5 :

THREAD # 2
******************
******************
in loop while k=8 :


in loop for j=2 :

in loop for j=5 :

THREAD # 2
******************
******************
in loop while k=9 :


in loop for j=2 :

in loop for j=5 :

in loop for j=8 :

Thanks,
B.

Last edited by Franklin52; 04-29-2009 at 06:29 PM.. Reason: adding code tags
# 2  
Old 04-29-2009
First, please put [code ][/code] tags (sans the space) around your listing, it's easier on the eyes. And since we're on the subject, could you shorten your output?

Second: Your thread has to run 8 printf()s, which translates to about 25 system instructions, times 10 = 250 instructions. Given that even a P90 from the last century can do roughly 90000000 instructions per second, your code is done long before the kernel has any reason to preempt it.
# 3  
Old 04-30-2009
You need to create your threads as joinable i.e.

Code:
pthread_attr_t attr;
....
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
....
pthread_create( &thread1, &attr, thread_function, (void*)&nico1);
....

Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. UNIX for Advanced & Expert Users

Change value for POSIX

Hi, I have a VM with following configration . 3.10.0-693.1.1.el7.x86_64 #1 SMP Thu Aug 3 08:15:31 EDT 2017 x86_64 x86_64 x86_64 GNU/Linux My current POSIX is :-- Your environment variables take up 2011 bytes POSIX upper limit on argument length (this system): 2093093 POSIX smallest... (15 Replies)
Discussion started by: Abhayman
15 Replies

2. UNIX for Advanced & Expert Users

Linkage of POSIX threads function calls

I wonder if someone knows what is the rationale behind linking function calls of the POSIX threads library at link-time vs. run-time. For example, if I create the following program: #include <pthread.h> void noop() { return; } int main() { pthread_self(); pthread_atfork(noop,... (1 Reply)
Discussion started by: jsimsa
1 Replies

3. Programming

need help with posix threads

Hi, I am new to posix threads. The no of threads to be created depends on the runtime. If I get the number of threads, I need to forward declare pthread_t mythread; how to do that can I use pointers and use malloc()?? I also have another question. The pthread_join is used to make... (0 Replies)
Discussion started by: brett01
0 Replies

4. Programming

POSIX threads and data safety

I created multiple POSIX threads (on readhat Linux) in a C program in my app. What I am doing is - I am creating threads equal to the number of CPUs in the system and and equal number of instances of a certain data structure, basically a queue implementation. I am assigning one ID to the thread... (2 Replies)
Discussion started by: radiatejava
2 Replies

5. Programming

Posix

HI, When i am configuring php in SUN Solaris. I am getting the below error. configure: error: Your system seems to lack POSIX threads. Do i need to install POSIX? If so can somebody let me know where can i download POSIX for Solaris 8? Thanks, (2 Replies)
Discussion started by: Krrishv
2 Replies

6. UNIX for Advanced & Expert Users

Threads and Threads Count ?

Hi all, How can I get the list of all Threads and the Total count of threads under a particular process ? Do suggest !! Awaiting for the replies !! Thanks Varun:b: (2 Replies)
Discussion started by: varungupta
2 Replies

7. Programming

POSIX threads

Hello ! Let's supose I have a main function in C , and two POSIX threads. I give you an example down : int main() { int something; char else; void *FirstThread(); void *SecondThread(); .. <start those two pthreads ..> return 0;} void *FirstThread() { ... } void *SecondThread()... (2 Replies)
Discussion started by: !_30
2 Replies

8. UNIX for Dummies Questions & Answers

how to read POSIX?

how to read POSIX? poe six or not? (3 Replies)
Discussion started by: robin.zhu
3 Replies

9. BSD

Posix queues

Hi! Everybody%) I got a question like this: Does my FreeBSD5.1 support Posix queues. Thanks! (7 Replies)
Discussion started by: kamazi
7 Replies
Login or Register to Ask a Question