In the previous two blogs (the implementation of thread-safe unlocked ringbuffer, a non-lock queue implementation of a read thread for multiple write threads), it was written that in the case of only one read thread, one write thread, and only one write thread, two read thread, no lock technology was used, Even the implementation of the cyclic queue of atomic operations. However, in other cases, we also nee
may cause some potential problems.The ABA problem is most likely to occur in the lock free algorithm. CAS bears the brunt of this problem because CAS judges the pointer address. If this address is reused, the problem will be very high.(Address reuse often occurs. After a memory is allocated, it is released and distributed. It is likely that the original address is still used)
For example, the preceding deq
It is common for websites to mount hidden links, advertising, leeching, and Trojans. It takes me a lot of time to deal with them, not to mention CC and DDoS attacks, to share these security questions, you can only find yourself unlucky. How can we save time and effort to solve these problems? If the company has O M personnel, congratulations, you are lucky. If not, the best way is to choose a practical website and server security software.
This is the free
In programming, we sometimes encounter situations where one thread writes data into a buffer and another thread reads data from it. So there is the problem of multi-threading competition. The usual solution is to lock up competing resources. However, the general lock loss is higher. In fact, for such a thread to write, a thread read the special case, can be a simple loc
In programming, we sometimes encounter situations where one thread writes data into a buffer and another thread reads data from it. So there is the problem of multi-threading competition. The usual solution is to lock up competing resources. However, the general lock loss is higher. In fact, for such a thread to write, a thread read the special case, can be a simple loc
Message Queue is the cornerstone of communication on some platforms. The communication between tasks is based on message queues. The processing speed of message queues often affects the performance of the entire system. To avoid multi-task processing of message queues at the same time, A lock is usually required for mutually exclusive access when a task is processing a queue.
1: assume that each module has its own message queue. Any module can send me
Recently, some C #2.0Code... Discover unsafe implementations of various threads
No concurrentcollection classes in 2.0
As a last resort, I wrote one myself,
Originally intended to use the traditional lock implementation, but considering that the operation is very lightweight... Eventually still uses the lock free
Use interlocked to replace common
. CAS is required every time after the change. In high concurrency, the failure probability is very high and it is a vicious circle, the latter has much lower overhead and has no side effects (in the previous issue, the base variable will be counted at sum, and the base value will not be lost ). Therefore, it may be better not to change.
4. Can AtomicLong be discarded?My idea is to discard it, because although LongAdder occupies a little space, its performance is enough to explain everything, wh
Disruptor is an efficient Memory Lock-free queue open-source by Lmax. I have read the relevant design documents and blogs over the past two days. I will try to summarize them below.
The first part. IntroductionWhen talking about concurrent program design, there are several concepts that cannot be avoided.
1. locks: locks are the easiest way to implement concurrency. Of course, the price is also the highest.
Precautions for using lock-free queue (ring buffer), queue Loops
The circular buffer is a common data structure in the producer and consumer models. The producer puts the data into the end of the array, and the consumer removes the data from the other end of the array. when the end of the array is reached, the producer returns to the header of the array. If there is only one producer and one consumer, the R
CAS atomic Operations--compare Set, or Compare Swap, now almost all CPU instructions support CAS atomic operations, X86 corresponding to CMPXCHG assembly instructions.You should remember the concept of "atomic manipulation" inside the operating system, where an operation is atomic (atomic), and if the upper layer of this operation is not able to find its internal implementation and structure. An atomic operation can be a step or multiple steps, but its order cannot be disrupted, or it can be c
This article provides an implementation code for the C ++ lock-free queue, which is mainly used for one thread to read data and write data in another thread.
Copy codeThe Code is as follows: # ifndef LOCK_FREE_QUEUE_H _
# Define LOCK_FREE_QUEUE_H _
// No lock queue, suitable for reading by one thread and writing by one thread# Include Template Class LockFreeQueu
operation.Thread 1 Thread 2MOVL Global,%eax;global value is 5,%eax value of 5Addl $1,%eax;%eax value is 6------Now thread 2 gets execute permission--------->MOVL Global,%eax;global value is 5,%eax value of 5Subl $1,%eax;%eax value is 4MOVL%eax,global;%eax value is 4,global value of 4MOVL%eax,global;%eax value is 4,global value of 4As can be seen from the above example, the result is not that we expect the value of global to remain the original value after 1 minus 1, but from 5 to 4. This is the
1 #ifndef Mutex_class_h2 #defineMutex_class_h3 4 classMutex_class5 {6 Public:7 Mutex_class ();8 void Lock();9 voidunlock ();Ten One Private: A //The following is used, and the general lock is almost - intMutex_value; - }; the - #endif //Mutex_class_h1#include"Mutex_class.h"2#include 3 4 #defineLock_value 05 #defineUnlock_value 16 //nt Mutex_value = lock_value;7 #defineFree_lock (Mutex_val
order to make full use of the queue, an end index is added to ensure that at least one data is written to the end of the queue. The variable-length queue data structure is defined as follows:See my blog for details about edge length arrays
http://blog.csdn.net/xy010902100449/article/details/46522533
typedefstruct{ /*读指针*/ /*写指针*/ /*队列结束指针*/ uint32_t size; /*缓冲区大小*/ char *buff[0]; /*缓冲区起始地址*/}ring_buff_st; Copyright NOTICE: This article for Bo Master original
This is a creation in
Article, where the information may have evolved or changed.
Lock-free queue for scenarios:
Two threads of interaction data, one thread production data, another thread consuming data, high efficiency
Cons: Need to use fixed allocated space, can not dynamically increase/decrease length, there is space waste and can not expand the space problem
Package Mainimport ( "FMT" "Reflect"
(nodes, last); } voidPushlisttodelchain (node* First, node*Last ) { Last->next =Tobedeletedchainhead; //Put current head of delete chain to the next of the last . //Then let's the first be the head. while(!tobedeletedchainhead.compare_exchange_weak (last->Next, first)); } voidPushnodetodelchain (node*node) {Pushlisttodelchain (node, node); } Public: voidPush (TConstvalue) {AutoConstNewNode =NewNode (value); NewNode->next =head.load (); while(!head.compare_exchange_w
See cool shell http://coolshell.cn/articles/8239.html
CAS is an implementation of lock-free, which forms an important basis for efficient concurrent containers of JDK concurrent packages. Therefore, read it carefully.
Post-read notes
Understanding of ABA:
In dB, it is a common practice to change the value of the last modified time field in a row of records as a reference object when updating the records
The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion;
products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the
content of the page makes you feel confusing, please write us an email, we will handle the problem
within 5 days after receiving your email.
If you find any instances of plagiarism from the community, please send an email to:
info-contact@alibabacloud.com
and provide relevant evidence. A staff member will contact you within 5 working days.