Programming :: Portable Pthread Library Out Of 10 Distros?
Mar 10, 2011
im writing a cross-platform software (linux/solaris/mac/bsd) so i was wondering, how portable is pthread library? out of 10 linux distros, how many will have it by default? and does it exists on mac/solaris/bsd by default? or user will have to install it?
I have faced a problem with my code (a small tcp server). After the thread returns, the memory not decreases, but when a new connection is made, memory not increases and the new connection initialize a new thread with a same thread id of the previous thread. When two connections are made at same time, two thread ids are created and when the respective threads returns the memory not decreases. The Valgrind indicates that not memory leak occurs, the pointers are released. Indeed, more memory are allocate when new thread id is created. i used gcc and debian.
I have created a pthread, and installed a signal handler inside that, same way as we do in main( ) function. The thread's signal handler is a separate function. Surprisingly, it is not working, that is the thread's signal handler is not able to catch signals. Here is the code:
I want to suspend/resume a thread. The library I am using is pthread.h.I am also running my application on linux.Is there any function in pthread. let me suspend a thread temporary?I have read a document in which it was mentioned thatthread does not support suspend/resume
I'm trying to figure out how pthreads are mapped from the compiler to the Linux kernel. The pthread prototypes are found in a compiler header file (pthread.h), yet the kernel would be responsible for scheduling the threads. So, how does the compiler resolve the pthread symbols at compile time?
I am wondering if pthread could make that a single thread keeps the "mutex" all the time if the time it remains unlocked is very small.
thread1 { while (1) { lock; do_task(); unlock();
[code]...
I experiment the thread2 never getting access to the mutex and never printing the nice message. I would expect that once thread2 calls "lock", it would get the mutex as soon as thread1 calls unlock() but it does not seem to be the case. If I add a sleep of some microseconds (100) in thread1 after unlocking the mutex, it solves the problem.
Does anyone know if this behaviour is normal? Is there a way to configure my mutex so that thread2 receives it when unlocked?I use
I am working on a large program in C to run on Puppy Linux. I have multiple pthreads running. I want to be able to set the pthread SCHED_POLICY and priority in my program but I want a user to be able to run the program without root privilege. Using a sticky bit and root ownership gives the user too much power because they will be able to write and compile their own scripts. Is there a way to use 'sudo' when I set the thread parameters from my program or something like this?
I have to compute prime numbers with threads in C. So I choose the algorithm "Sieve of Eratosthenes" and I tried to create 2 threads, but I don't know how to optimize my computing function with threads I beg for help. This is my function:
[Code]...
but it seems like the both of the threads are calculating the same function twice? Is it possible to be optimized or not?
I'm reading about shared, static, and dynamic libraries. What is SDL? Is it static, shared, or dynamic?
I always thought a library would be a lot of .h and .cpp files compiled separately into .o files and then if you compiled your own program you could use the -l parameter to link the library and it was all compiled together. Now I'm not so sure.
I don't even see any SDL .cpp files in my system anywhere. All I have are lots of SDL .h files in /usr/include/SDL and I don't really understand the code in them.
I'm making a wild guess here: SDL is a shared library. SDL itself is NOT compiled into my program, therefore SDL must be on any system my program tries to run on. When I compile and link SDL all it needs is the header files to know what SDL function and objects it can use. And then on every system it uses an already compiled SDL shared library thingy somewhere.
So... where is that part of SDL? All I can find are header files.
I'm thinking the advantage of shared libraries is that someone could say update SDL on their own system and take advantage of the new features without having to download new executables with the new version of SDL compiled into them for every program that uses SDL.
So if I'm making an editor and a game engine and they both use a lot of the same .cpp and .h files that I wrote and I'm tired of updating one and then the other and I need to turn them into a library, then a shared library might be kind of a silly solution. I could just make a static library. Right? Because it's not SDL. Nobody else is ever going to use this library.
I'm building a simple(?) socket server using threads to serve up a few requests. The spec is such that I have to listen to three ports at once, so I decided to use pthread to create three separate threads that would wait for connections, then spawn new threads to handle them.
The problem is that when I do this, for some reason the program never enters the wait loop and instead terminates (All three threads did get created since the messages get printed properly.) It gets to the line which prints "???", but not the line after the accept() call.I don't see an open port when I check for one either so I'm 99% sure they're terminating.Basically I have a main() method which has three calls to pthread_create, which should result in three threads being run that all wait for connections (listenOnPort). After each thread creation I print some info to make sure it's actually being created.
By the way, when I just run listenOnPortwithout threading, the server appears to enter the loop correctly and seems to be waiting for requests. It's only when I run the functions as threads that the problem seems to happen.The source is attached below. Any help will be appreciated. Much of the code is borrowed from a website (I can't post it because I am new here.) You need not worry about the handler_ methods because those are just methods that are run by the threads themselves.
Also--the original source was in C and I changed it to C++. Should I just use C? server.h Code: /* * server.h
i have an application that launches several pthreads, i know that the default size used by Linux is 8Mb for each pthread. However i would like to optimize the total memory usage by my application by decreasing the default stack size of each pthread to the needed resources. My questions:
- Are there any rules to set the pthread stack size. - How to compute the memory needed by each thread. - Is the malloc call inside a thread counted from the stack size of the same pthread?
I'm using Zabbix on which I can use give bash command to the agent.This 1-liner will give me all the interfaces with their IPv4 addresses.I have a 2nd expression which returns a checksum so I can detect a difference whenever someone deletes/adds/changes an ipv4 interface.This is the output on my Ubuntu-server:
I have an odd issue that I am running into. My objective is to insert the following lines at the end of /etc/inputrc on an RHES box:
Code: # alternate mappings for "page up" and "page down" to search the history "e[5~": history-search-backward "e[6~": history-search-forward
I would like this sed snippet to be portable and thus far it's worked. However, I ran into one box where after I ran the snippet, Subsequent sessions lost the ability to use the letter "e". The original version I was using looked like this:
Code: mv /etc/inputrc /tmp/inputrc.orig sed 's/'$endif'/ # alternate mappings for "page up" and "page down" to search the history "e[5~": history-search-backward "e[6~": history-search-forward &/' /tmp/inputrc.orig > /etc/inputrc
Then instead of using s/ I thought perhaps i/ would be better so I re-did it as:
Code: mv /etc/inputrc /tmp/inputrc.orig sed '/'$endif'/ { i i # alternate mappings for "page up" and "page down" to search the history i "e[5~": history-search-backward i "e[6~": history-search-forward }' /tmp/inputrc.orig > /etc/inputrc
Both of these produce the expected result BUT they both resulted in the loss of the letter "e". As I mentioned earlier in the post, this was working on 'newer' RHES 5 and up but I have the misfortune of having to support some older RHES 4 boxes in a closed lab. This particular box is an RHES 4u6.
How can we convert a dynamic library (filename.so) to a static library (filename.a) using gnu gcc . Can we get a static library form a dynamic library . I saw a few post in which the conversion form a static library to a dynamic library is mentioned but, unfortunately, not the other way.
I've been trying to understand pthread in C a little better. So I made a simple program that takes in a string from the command line and creates a thread to print the string. I've looked online and copied the basic concepts but there are something things I'm confused about. The programs works just fine, but I have questions. Here's what I have so far.
[Code]....
One thing I'd like to know is why the 3rd argument in the pthread_create function which is my SendMessage function needs to be typecasted to a void pointer and then send the address of the function. Also as for the 4th argument, I would see typecasting to void pointer in some of the pthread examples I saw online, but in my case I'm passing a char pointer, would this be correct? In which case would I ever want to pass a void pointer?
Do I need a pthread_exit(NULL) in my main and in the SendMessage function? If so, why? I added the sleep() function so that I could let the pthread_exit function in my SendMessage function execute first. I simply saw that the online examples on pthread had pthread_exit() in both locations.
i want to make a screen capture program for linux as my software engineering project. but i am not getting from where to start. i have a bit knowlege of gtk and that of c/c++ but from where can i get other references which i should know for building it.
other than Python, which languages are built into most Linux distros, using a real-time interpreter, like the Python prompt, where you can just enter some commands and test out ideas before actually creating a file with your program?
How to make simple games (snake, pong... nothing too fancy). I have completed making snake and now want to be able to distribute it. I built it using C++ and wxWidgets so it would be multi-platform. I'm able to compile it and run it in both Windows and Ubuntu using g++. In windows, I was able to distribute it by putting a *.dll file in the same folder as the executable. However in Linux, I don't understand what I need to do so that it would run on any installation of Ubuntu out of the "box". When I build it and try to run it in a different installation of Ubuntu (which has g++) it gives me an error saying that a particular library file was not found and Getlibs fails to find that library file.
Is there a way to build a project with G++ so that all the dependencies are either packaged in the executables or copied into the folder....?
I'm trying to make one that has some sorts in it for now. I know you have to make a header file and a .cpp file. I'm using VC++(yes, I'm in school so windows in needed. I use Ubuntu at home I swear D if it makes a difference. What goes in the header file, how is the cpp file set up, and then where do I put the files once I'm done?
i have a code written in c..for which i was trying to create a gui using Gtk+.but now i want to use qt4 for the same purpose but native language of qt4 is C++. i have to do library binding for my C code to develop a gui using qt4.
I am trying to write a program that can get the times from files on a NTFS drive in Linux using the ntfs-3g library. I have installed the development libraries and source on my Fedora 10 machine. I can find the headers in the /usr/include/ntfs-3g directory but when i try and compile my program I am getting an undefind reference to ntfs_mount() call. I have the following in my link string
g++ -L/lib -o ProgramName -lpthread -lntfs-3g
I did a pkg-config --cflags --libs libntfs-3g and it said all i needed was the -L/lib -lpthread and -lntfs-3g.
To create a static library, or to add additional objectiles to an existing static library, I can use a command like this:ar rcs my_library.a file1.o file2.oBut how to add an existing static library to my own static library. I have created my own static library using the command above and want to link against the library libuuid.a (placed in /usr/lib/).
I jus found that #include<stdio.h> is not working with gcc and neither any function from the library like clrscr(); i found due to <stdio.h> is a windows lobrary file so its not come with linux. But I want to to know if I have to call any function from that library what should I do? Is there any way to install <stdio.h> in linux?
Where are the definitions for C library functions located? It was just recently that I realized that header files don't actually define any functions, they merely include their prototypes.
For instance, stdio.h includes the following line:
Code:
This just means that the definition of printf() is located in another file. What file? Is there some kind of default shared object file that is automatically included during compilation?
I'm trying to learn how to cross-compile libraries (static and shared) and executables for the Blackfin + uClinux environment.At this point, I can successfully compile a stand-alone "Hello, world" but fail when trying to add a (static) library to the mix.Here's the source code I wrote: