Suppose I have a list, and I want to use a test_and_set operation a parameter of which is the calculation of some pointer address l->a.next->next. This, I think, will not be atomic, and the test_and_set will be useless. Is there a way to calculate that pointer value atomically so that the TAS will work atomically?
Atomic operations over a list
590 Views Asked by Dervin Thunk At
1
There are 1 best solutions below
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 CONCURRENCY
- Unexpected inter-thread happens-before relationships from relaxed memory ordering
- Multiple Processes, Multiple Processors, Single Priority Queue - Java Thread-Safe and Concurrency -
- Efficiently processing many small elements of a collection concurrently in Java
- Zig Concurrency Vs Erlang Concurrency, is Zig less efficient than Erlang?
- Two Update statements on a row are running simultaneously with no locking in MYSQL
- How to Identify Specific Transaction Anomalies in a Given Schedule?
- How can I improve concurrent message processing with Google Task Queue?
- Why does the following program printf "thread 1 exists" twice in WSL2?
- ModelState.IsValid is false when its Data Model Concurrency Token is non nullable
- .NET A second operation was started on this context instance before a previous operation completed
- Can someone tell me what's wrong with mi Task.await?
- I am a beginner. More than problems, I have ideas I share my code ;D. NO RULES
- Understanding Potential Deadlock in Resource Pool Implementation Described in "Go in Action"
- Why are pre-allocated stacks expensive, given 64-bit virtual memory?
- Concurrency issues with server-sent events in Python
Related Questions in ATOMIC
- Thread-safe lock-free min where both operands can change c++
- In Rust, what is the lock-free alternative of Arc<RefCell<T>> if T is already Sync & lock-free?
- Prevent reordering of prefetch instruction in c++
- What can be inferred according to the result of atomic operations?
- How can atomicModifyIORef cause leaks? And why does atomicModifyIORef' solve the problem?
- Critical section control with atomics
- Handling Concurrency, Overflow, and Periodic Draining in a Rust HashMap Collection
- Atomic Operations do not provide updated value to other threads
- memory order with multiple stores
- Why std::mutex of c++11 has no memory order?
- Pausing threads for synchronized operation
- EJB transactions behaving differently on Wildfly 8 between Windows and Linux deployments
- Atomically reorder huge list of documents in firestore
- Atomic increment does not work as expected in interrupt
- Most efficient way to signal consumer thread from multiple producer threads using condition variables
Related Questions in TEST-AND-SET
- Why does C/C++ not have a atomic flag test_and_clear?
- Should I use notify() instaed of notifyAll() in this case?
- test_and_set makes the thread deadlock
- TAS instruction 68000
- Semaphores with test and set (code implementation possible mistake)
- does the atomic instruction involve the kernel
- Implementing a mutex with test-and-set atomic operation: will it work for more than 2 threads?
- Need help understanding implementation of mutex with test_and_set
- Mutex implementation without hardware support of Test-and-Set and CAS-operations
- Implementation of a lock using test and set
- PHP flock() for read-modify-write does not work
- CMPXCHG and critical section implementation
- How to analyze a mutual exclusion algorithm with two atomic test-and-set calls
- History of the ++/-- Operators as compared to the test-and-set instruction/operation
- Mixing lock-less and lock-full thread synchronization with atomic TestAndSet in C++
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)
Popular # Hahtags
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?
You probably mean CAS (more useful).
In general: yes it is often used to implement transactional or wait-free datastructures,
Buf first things first: let's separate address-calculations from atomic operations on an address, you first get the specific address at which something should be swapped, the CAS does not care how you got there.
Specifically you should first let each of your threads navigate the list until they find a place where they want to replace a next-pointer, then they can try-repeat this by using CAS. It depends on your scenario whether the thread has to re-walk the list for the retry.
The tricky part is actually at a different place in the code: where you free (or re-use) the list-nodes. In general you have to assume that you cannot re-use or free node-chains that were disconnected from your list ever. In practice there are heursitics you can use but this depends on your use-case.