I'm trying to make a simple reader/writer program using POSIX named semaphores, its working, but on some systems, it halts immediately on the first semaphore and thats it ... I'm really desperate by now. Can anyone help please? Its working fine on my system, so i can't track the problem by ltrace. (sorry for the comments, I'm from czech republic)
Reader-Writer using semaphores and shared memory in C
2.9k views Asked by Salamander At
2
There are 2 answers
0
srk
On
In computer science, the readers-writers problems are examples of a common computing problem in concurrency. There are at least three variations of the problems, which deal with situations in which many threads try to access the same shared memory at one time. Some threads may read and some may write, with the constraint that no process may access the share for either reading or writing, while another process is in the act of writing to it. (In particular, it is allowed for two or more readers to access the share at the same time.) A readers-writer lock is a data structure that solves one or more of the readers-writers problems.
Related Questions in C
- How to call a C language function from x86 assembly code?
- What does: "char *argv[]" mean?
- User input sanitization program, which takes a specific amount of arguments and passes the execution to a bash script
- How to crop a BMP image in half using C
- How can I get the difference in minutes between two dates and hours?
- Why will this code compile although it defines two variables with the same name?
- Compiling eBPF program in Docker fails due to missing '__u64' type
- Why can't I use the file pointer after the first read attempt fails?
- #include Header files in C with definition too
- OpenCV2 on CLion
- What is causing the store latency in this program?
- How to refer to the filepath of test data in test sourcecode?
- 9 Digit Addresses in Hexadecimal System in MacOS
- My server TCP doesn't receive messages from the client in C
- Printing the characters obtained from the array s using printf?
Related Questions in POSIX
- Is it safe to assume 8-bit char on Linux and FreeBSD, based on POSIX?
- How many senders and receivers of a notification are possible in a POSIX message queue
- Does opendir() / FindFirstFile() get a snapshot of a directory?
- Differences in behavior of kill(pid, SIGINT) between Debian and Red Hat based distros
- select() always returns 0 Serial Port (UART) vxWorks
- some questions about posix_trace_* function
- In LDAP: Differentiating via OU or via attribute?
- recvmsg returns EAGAIN after select reports file descriptor is ready
- Can close of pipe's write end fail leaving reading process blocked?
- Why, on Linux (specifically Ubuntu 20.04 LTS), a POSIX shared memory object survives reboot and then suddenly belongs to the "root" user?
- file.tell() after a write is not correct in append mode?
- Map UNIX "nobody" and "nogroup" to Win32 Accounts/SIDs?
- POSIX Message Queue - "Message too long" on send
- Does the POSIX Standard really mean that a non-thread safe function can break the thread-safety of every other function?
- awk dot in regex doesn't match space
Related Questions in SEMAPHORE
- Binary Semaphore vs Mutux interview question
- Why sem_post() looks like blocked when using WinAPI and Semaphore to create a program that re-running again and again
- How to Create Multi-Unit Acquire/Release with std::counting_semaphore in C++20 for a Producer-Consumer Scenario?
- Techniques for making a method non-reentrant
- Trying to find a way to limit the number of List<Task> that can run at one time
- ManagedIdentityCredential authentication failed: Adding the specified count to the semaphore would cause it to exceed its maximum count
- Strange output in a synchronization problem using binary semaphores in C
- C semaphore and shared memory
- How do I resolve the semaphore timeout expired issue, with SerialPort in .NET 7 C#?
- aiohttp.client_exceptions.ClientConnectorError: Cannot connect to host :443 ssl:default [The semaphore timeout period has expired]
- Using Goroutines to Annotate and Fetch Data in Background – Semaphore Acquisition Error within Route Handler
- How can I implement a Semaphore via a database?
- What if we keep calling semGive multiple times without semTake in binary semaphore? What will be the behavior?
- Web App, control number of available tasks in Hangifre jobs, each executing Parallel.ForEachAsync
- Thread #1: Bug in libpthread: sem_wait succeeded on semaphore without prior sem_post
Related Questions in READERWRITERLOCK
- AsyncReaderWriterLock for a server that uses LiteDB
- Implementing reader-writers lock using basic pthread objects and methods
- Readers-writers problem, I need to let in 5 readers per writer in the database
- Reader/Writer: multiple heavy readers, only 1 write per day
- About shared_mutex and shared_ptr across multiple threads
- How does linux( or any OS) file system "exactly" handle concurrent file I/O (kernel's scheduling)?
- Reader writers problem using Java Threads
- LockRecursionException in multiple threaded function
- Segmentation fault (core dump) First reader-writer problem
- Reader Writer java with a limited number of readers
- When using ReaderWriterLock does second thread actually wait or not
- Questions about ReaderWriterLockSlim. I use readerwriterlockslim to read and write, but only show write at last in console. Why?
- What will happen if you modify the reader process in reader-writer problem?
- Does an Arc allow an RwLock to have more than one writer?
- The reader writer lock I wrote backed by GCD code causes a deadlock in parallel test
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
POSIX semaphores are not well suited for application code since they are interruptible. Basically any sort of IO to your processes will mess up your signalling. Please have a look at this post.
So you'd have to be really careful to interpret all error returns from the
sem_functions properly. In the code that you posted there is no such thing.If your implementation of POSIX supports them, just use rwlocks, they are made for this, are much higher level and don't encounter that difficulty.