linux-c-programming.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Daniel Hilst Selli <danielhilst@gmail.com>
To: Celelibi <celelibi@gmail.com>
Cc: linux-c-programming@vger.kernel.org
Subject: Re: passing arguments to pthreads
Date: Fri, 14 Mar 2014 14:30:48 -0300	[thread overview]
Message-ID: <53233CC8.8020701@gmail.com> (raw)
In-Reply-To: <CAJR2zJ_eiJPAHjKy1=5HuG7gBO3qFi8b+ggnpbCsv4n5UBUu7Q@mail.gmail.com>

On 03/14/2014 12:46 PM, Celelibi wrote:
> 2014-03-14 16:08 UTC+01:00, Daniel Hilst Selli <danielhilst@gmail.com>:
>> Hi, I have a question about passing multiple arguments to pthreads, the
>> big deal is where the paremeters are kept.. I see two possible
>> solutions.. keep it on static variables that are never deallocated.. or
>> on heap.. so here is my first question
>>
>> Passing local (stack) variables as arguments to thread is trouble, since
>> the scope of this variables can go away before my thread returns..right?
>> So forget about local variables
>>
>> So here is the two options I see, static vs heap...
>> I'm using this model on one of my applications, is the same senario, a
>> function that receives 3 ints as arguments and is called as a thread.. I
>> create a little wrapper... here is the code http://pastebin.com/Air7u0YD
>>
>>
>> How gurus does this? I free the args on threadfd wrapper since, on my
>> real application can't join the thread, to be honest, is and deatached
>> thread.. Is there something wrong with this strategy, it seems ugly to
>> me....
>>
>> Cheers,
>
> Hello,
>
> If you don't mind making the start time of the threads a bit slower,
> you can make every thread copy its data into its local stack.
> You can either allocate one set of arguments on the stack of the main
> and then, with a semaphore wait for the thread to copy its data before
> erasing it with the data for the second thread and so on.
> Or you can allocate enough memory for the arguments of all the
> threads, start all the threads, and still with a semaphore wait that
> all the threads copied their own data to their stack.
Making parameters local to threads seems an elegant solution for me, how 
would I do it? Should I use this? 
http://pubs.opengroup.org/onlinepubs/007904975/functions/pthread_getspecific.html


>
> You can also make something in-between by allocating enough memory for
> a fixed number of arguments. But it's becoming complicated to handle
> for probably no gain.
This seems what I'm doing right now.. For simple cases seems acceptable 
but for complex case, it seems to be trouble to handle...

>
> But actually, I don't really see why you wouldn't join the threads.
> You must not terminate the function main while the threads are
> running. If you do, all the threads will be terminated.
I have this cenario, I'm wrinting a layer that will sit between an 
industrial stack and end user (a programmer)... the stack will call my 
callback for any events that ocurr, my callback should forward the call 
to user's callback based on event, in other words, my layer will handle 
some events, others are passed to user.. The problem is that the stack 
call my callback from its context and this blocks stack execution until 
my callback returns, this is the reason I'm creating a new thread in 
first place.. I can't trust user to return fast, I can't wait for it.. 
this is why I'm not joining the thread...

Thanks for your help :-)

Cheers...
>
>
> Celelibi
>


  reply	other threads:[~2014-03-14 17:30 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-03-14 15:08 passing arguments to pthreads Daniel Hilst Selli
2014-03-14 15:46 ` Celelibi
2014-03-14 17:30   ` Daniel Hilst Selli [this message]
2014-03-14 19:22     ` Celelibi
2014-03-18 22:21       ` Daniel Hilst Selli
2014-03-19  1:44         ` Celelibi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=53233CC8.8020701@gmail.com \
    --to=danielhilst@gmail.com \
    --cc=celelibi@gmail.com \
    --cc=linux-c-programming@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).