Sponsored Content
Full Discussion: Multi-threading questions
Top Forums Programming Multi-threading questions Post 42698 by Perderabo on Sunday 2nd of November 2003 10:34:52 PM
Old 11-02-2003
Re: Multi-threading questions

I'll try to answer your questions, but I have only written a few sample pthread programs. But it's not like I'm a thread expert.

Quote:
Originally posted by DreamWarrior
I know that errno is thread safe when the _REENTRANT macro is defined...what about when it is not?
Then errno is not thread safe. If you insist on invoking a non thread safe library then your expected results are undefined. My guess is that the library will use the one-per-process errno and get the last error of any system call invoked by any thread. I would not expect repeatable results.

Quote:
Originally posted by DreamWarrior
2) I've seen functions re-written to be thread safe by doing their work in a local variable, then copying that local variable out to a user passed in storage area. What I wonder is, what about just using the user defined storage area directly?
When I've seen stuff like that, it was to warn against using a local static variable and then passing the address of that local static variable back to the caller. If you have a already written function that does that, a simple memcopy at the end will render it thread safe. I don't see a real problem in using the caller's area directly. But if you do that, you will be dereferencing a pointer, perhaps repeatedly. That may not be a speed win.

So they were not rewriten to USE a local variable. They were rewritten to not return a pointer to a local variable.

BTW, at very high optimization levels a memcpy will be "inlined", that is, it becomes a sequence of instructions rather than a true call. It may even become a single machine language instruction.

Quote:
Originally posted by DreamWarrior
Therefore, how do I provide both thread safe interfaces and standard interfaces in one library without requring an application to link with the pthread library.
Actually you have it backwards. Thread-safe interfaces are standard. A process is always a collection of threads. Sometimes it simply has one thread. You don't need a thread library unless you are assuming multiple threads, so don't assume that.

I haven't looked at the source code for the standard libraries, but I guess that there are 3 cases.

1. Some stuff is so primative that it always was thread safe.

2. Some stuff was not thread safe, but it could be made thread safe with changing the interface presented to the caller. So this was done.

3. Some stuff could not be made thread safe without visible changes. So seperate versions were made. For the most these are functions that tripped on the issue in your 2nd question.
 

10 More Discussions You Might Find Interesting

1. Programming

Multi threading using posix thread library

hi all, can anyone tell me some good site for the mutithreading tutorials, its application, and some code examples. -sushil (2 Replies)
Discussion started by: shushilmore
2 Replies

2. Programming

Multi threading using fork

Hi, I have written a code which will run a set of process using fork. I want to know from You how can i start another job when one of my job in my loop is completed My code is #include<stdio.h> #include<ctype.h> main() { int pid,cid; ChildProcess(); ... (1 Reply)
Discussion started by: sureshraju_ma
1 Replies

3. Programming

Regarding Multi-Threading

Hi All, Here's my question I have a 385 MB file containing 5,000,000 records. I need to read from the file and load into a table. Initially i thought of doing it in a single thread (execution of a single program) but when calculated accounted 16 hours of time on a standard benchmark. Hence... (5 Replies)
Discussion started by: matrixmadhan
5 Replies

4. Programming

Multi threading?

I am not sure if multi threading is the correct term, but here is what I am trying to do. I have a while loop that displays the number 1, pauses, displays the number 2, pauses , displays the number 3 ad infinitum. It just keeps counting. While the screen displays the sequence of numbers counting... (4 Replies)
Discussion started by: enuenu
4 Replies

5. Programming

Multi-threading-- calling same function through different threads

Sir, Can I call same function in the start routines of different Threads. I have created two different threads....and wanna call same function from both threads....is it possible??? Also can I fork inside a thread??? (1 Reply)
Discussion started by: arunchaudhary19
1 Replies

6. Programming

Multi-threading

Hi, If we create 10 threads to invoke runQuery method at same time, Will queryProcessor will be overriden sometime or 10 different copies will be created? We are not using any sunchronzation mechnism in runQuery(). so there is not gurantee on QueryProcessor class variables right OR each 10... (1 Reply)
Discussion started by: jramesh1
1 Replies

7. Programming

Multi-threading

In this piece i implemented the gossip method. The first thread is invoked from inside the (msg is first sent from node -1 to 0 from main()) and the other threads are invoked from inside of the thread function itself. I used two mutexes and a condition variable to control the synchronization. ... (4 Replies)
Discussion started by: saman_glorious
4 Replies

8. UNIX for Dummies Questions & Answers

Confusion over Multi Threading

Hi, I am trying to get my head round Multi Threading and I have a few queries to try and clear up my confusion Q1. Is multi threading a hardware / chip level concept, an OS level or an application level concept ? I am trying to work out where SMT architecture fits in. Q2. What's the multi... (3 Replies)
Discussion started by: jimthompson
3 Replies

9. UNIX for Beginners Questions & Answers

Does UNIX support multi-Threading ?

Not just background process running ... but im looking if unix has any multi-threading concept like in Java, C# ... if not present, can you pls share the nearest feature in unix that is close to multi-threaded concept (3 Replies)
Discussion started by: i4ismail
3 Replies

10. UNIX for Beginners Questions & Answers

Multi threading in UNIX

Hi, Can we apply multi threading in Unix. I am using bash shell. We have a generic script to load the data to table based on file input. For each file there is an individual table to load. For each file found in directory I want to load the data in parallel to target table using ... (3 Replies)
Discussion started by: vedanta
3 Replies
NE_SOCK_INIT(3) 						neon API reference						   NE_SOCK_INIT(3)

NAME
ne_sock_init, ne_sock_exit - perform library initialization SYNOPSIS
#include <ne_socket.h> int ne_sock_init(void); void ne_sock_exit(void); DESCRIPTION
In some platforms and configurations, neon may be using some socket or SSL libraries which require global initialization before use. To perform this initialization, the ne_sock_init function must be called before any other library functions are used. Once all use of neon is complete, ne_sock_exit can be called to perform de-initialization of socket or SSL libraries, if necessary. Uses of ne_sock_init and ne_sock_exit are "reference counted"; if N calls to ne_sock_init are made, only the Nth call to ne_sock_exit will have effect. ne_sock_init will set the disposition of the SIGPIPE signal to ignored. No change is made to the SIGPIPE disposition by ne_sock_exit. Both the SSL libraries supported by neon -- OpenSSL and GnuTLS -- require callbacks to be registered to allow thread-safe use of SSL. These callbacks are stored as global variables and so their state persists for as long as the library in question is loaded into the process. If multiple users of the SSL library exist within the process, this can be problematic, particularly if one is dynamically loaded (and may subsequently be unloaded). If neon is configured using the --enable-threadsafe-ssl flag, thread-safe SSL support will be enabled automatically, as covered in the following section. Otherwise, it is not safe to use neon with SSL in a multi-threaded process. The ne_has_support function can be used to determine whether neon is built to enable thread-safety support in the SSL library. Thread-safe SSL with OpenSSL neon follows two simple rules when dealing with the OpenSSL locking callbacks: o ne_sock_init will set thread-safety locking callbacks if and only if no locking callbacks are already registered. o ne_sock_exit will unset the thread-safety locking callbacks if and only if the locking callbacks registered are those registered by ne_sock_init. Applications and libraries should be able to co-operate to ensure that SSL use is always thread-safe if similar rules are always followed. Thread-safe SSL with GnuTLS The cryptography library used by GnuTLS, libgcrypt, only supports an initialization operation to register thread-safety callbacks. ne_sock_init will register the thread-safe locking callbacks on first use; ne_sock_exit cannot unregister them. If multiple users of GnuTLS are present within the process, it is unsafe to dynamically unload neon from the process if neon is configured with thread-safe SSL support enabled (since the callbacks would be left pointing at unmapped memory once neon is unloaded). RETURN VALUE
ne_sock_init returns zero on success, or non-zero on error. If an error occurs, no further use of the neon library should be attempted. SEE ALSO
neon(3), ne_has_support(3) AUTHOR
Joe Orton <neon@lists.manyfish.co.uk> Author. COPYRIGHT
neon 0.29.6 3 May 2011 NE_SOCK_INIT(3)
All times are GMT -4. The time now is 10:02 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy