SlideShare una empresa de Scribd logo
1 de 17
Lock-Free Algorithms
Present by PanPan
Multi-Thread Programming Problem
Read a
a=a+1

Calculate a + 1
Save a + 1

Thread A

Thread B

Read a
Read a
Calculate a + 1
Save a + 1

Calculate a + 1
Save a + 1

Time
Multi-Thread Programming Solution
● Blocking
○ Mutex
○ Critical Section
● Non-Blocking
○ Wait-Free
○ Lock-Free
○ Obstruction-Free
● Local
○ No Shared Data
Dead Lock
void FunctionA()

void FunctionB()

Enter Critical Section A

Enter Critical Section B

Do Something

Do Something

Dead Lock ll FunctionA
Ca
Dead Lock Critical Section B
Lock
Enter
Do Something

Leave Critical Section B

Dead Lock Critical Section A
Enter
Dead Lock

Return
(Or Close)

Do Something
Leave Critical Section A
Leave Critical Section B

Leave Critical Section A

Time
What is Lock-Free?
A lock-free data structure is one that doesn't
use any mutex locks. The implication is that
multiple threads can access the data structure
concurrently without race conditions or data
corruption, even though there are no locks —
people would give you funny looks if you
suggested that std::list was a lock-free data
structure, even though it is unlikely that there
are any locks used in the implementation. [1]

Non-Blocking
Obstruction-Free
Lock-Free
WaitFree

[1] http://www.justsoftwaresolutions.co.uk/threading/non_blocking_lock_free_and_wait_free.html
Advantages and Disadvantages
● No "Lock" (Also No Dead Lock)
● Better Performance
● Hard to Implement
Main Concept
Atom Operation

● Use Atom Operation to Modify
Critical Data
● Enter a Spin State When Atom
Operation Fail

No
Success?

Yes

Finish
Compare and Swap
bool CAS(uint32* pointer, uint32 old_value, uint32 new_value)
{
if (*pointer == old_value)
{
*pointer = new_value;
return true;
}
return false;
}

InterlockedCompareExchange - Windows API
Other Atom Operation
● CAS2 - Compare and Swap 2
● CASN - Compare and Swap N
● DCAS - Double Compare Swap
● MCAS - Multiword Compare and Swap
● LL/SC - Load Linked / Store Conditional
Example - Stack
struct Node
{
volatile Node* next;
};
class Stack
{
volatile Node* head;
public:
void Push(Node* node);
void Pop();
Stack() : head(0) {}
};

Something Wrong

void Stack::Push(Node* node)
{
while (true)
{
node->next = head;
if (CAS(&head, node->next, node))
break;
}
}
void Stack::Pop()
{
while (true)
{
node* old_head = head;
if (head == 0)
break;
node* next_node = old_head->next;
if (CAS(&head, old_head, next_node))
break;
}
}
ABA Problem
Threa
dA

Threa
dB

Pop

Head

A
B

Pop

A
B

A

Head

C
C

B
C
Head

Push

A

Head

node* old_head = head;
if (head == 0)
break;
node* next_node = old_head->next;
if (CAS(&head, old_head, next_node))
break;
Solute ABA Problem
● LL/SC
○ It would return false when target have
done
a "write" action
● CAS2
○ Add a versioned value
Example - Stack(fix Pop)
class Stack
{
volatile Node* head;
volatile int version;
public:
void Push(Node* node);
void Pop();
Stack() : head(0), version(0) {}
};

Add Version

void Stack::
Pop()
{

while tru
( e)
{

Check Version
}
}

node* old_head = head;
int old_version = version;
if (head == 0)
break;
node* next_node = old_head->next;
if (CAS2(&head, old_head, old_version, next_node, old_version + 1))
break;
Summary
● Lock-Free has Better Performance Than Blocking
● Lock-Free has no "Lock"
● Lock-Free is Hard To Implement
● Lock-Free's Spirit - Atom Operation
● Lock-Free's Trap - ABA Problem
Notes and References
● Toby Jones - Lock-Free Algorithms(Game Programming
Gems 6)
● Jean-Francois Dube - Efficient and Scalable Multi-Core
Programming(Game Programming Gems 8)
● Zhou Wei Ming - Multi-core Computing and Programming
Any Questions?
Thanks for your attention
By PanPan
2010-06-29

Más contenido relacionado

Destacado (9)

3 f3 1_introduction_to_dsp
3 f3 1_introduction_to_dsp3 f3 1_introduction_to_dsp
3 f3 1_introduction_to_dsp
 
Anatomi
AnatomiAnatomi
Anatomi
 
Finalpresentation
FinalpresentationFinalpresentation
Finalpresentation
 
An activity i enjoy doing
An activity i enjoy doingAn activity i enjoy doing
An activity i enjoy doing
 
The Male Mixed Voice
The Male Mixed VoiceThe Male Mixed Voice
The Male Mixed Voice
 
Nomad
NomadNomad
Nomad
 
Hp deskjet 2
Hp deskjet 2Hp deskjet 2
Hp deskjet 2
 
Hinagpis ni florante
Hinagpis ni floranteHinagpis ni florante
Hinagpis ni florante
 
Bronchitis
BronchitisBronchitis
Bronchitis
 

Último

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 

Último (20)

Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 

Lock freealgorithms-130724010300-phpapp02

  • 2. Multi-Thread Programming Problem Read a a=a+1 Calculate a + 1 Save a + 1 Thread A Thread B Read a Read a Calculate a + 1 Save a + 1 Calculate a + 1 Save a + 1 Time
  • 3. Multi-Thread Programming Solution ● Blocking ○ Mutex ○ Critical Section ● Non-Blocking ○ Wait-Free ○ Lock-Free ○ Obstruction-Free ● Local ○ No Shared Data
  • 4. Dead Lock void FunctionA() void FunctionB() Enter Critical Section A Enter Critical Section B Do Something Do Something Dead Lock ll FunctionA Ca Dead Lock Critical Section B Lock Enter Do Something Leave Critical Section B Dead Lock Critical Section A Enter Dead Lock Return (Or Close) Do Something Leave Critical Section A Leave Critical Section B Leave Critical Section A Time
  • 5. What is Lock-Free? A lock-free data structure is one that doesn't use any mutex locks. The implication is that multiple threads can access the data structure concurrently without race conditions or data corruption, even though there are no locks — people would give you funny looks if you suggested that std::list was a lock-free data structure, even though it is unlikely that there are any locks used in the implementation. [1] Non-Blocking Obstruction-Free Lock-Free WaitFree [1] http://www.justsoftwaresolutions.co.uk/threading/non_blocking_lock_free_and_wait_free.html
  • 6. Advantages and Disadvantages ● No "Lock" (Also No Dead Lock) ● Better Performance ● Hard to Implement
  • 7. Main Concept Atom Operation ● Use Atom Operation to Modify Critical Data ● Enter a Spin State When Atom Operation Fail No Success? Yes Finish
  • 8. Compare and Swap bool CAS(uint32* pointer, uint32 old_value, uint32 new_value) { if (*pointer == old_value) { *pointer = new_value; return true; } return false; } InterlockedCompareExchange - Windows API
  • 9. Other Atom Operation ● CAS2 - Compare and Swap 2 ● CASN - Compare and Swap N ● DCAS - Double Compare Swap ● MCAS - Multiword Compare and Swap ● LL/SC - Load Linked / Store Conditional
  • 10. Example - Stack struct Node { volatile Node* next; }; class Stack { volatile Node* head; public: void Push(Node* node); void Pop(); Stack() : head(0) {} }; Something Wrong void Stack::Push(Node* node) { while (true) { node->next = head; if (CAS(&head, node->next, node)) break; } } void Stack::Pop() { while (true) { node* old_head = head; if (head == 0) break; node* next_node = old_head->next; if (CAS(&head, old_head, next_node)) break; } }
  • 11. ABA Problem Threa dA Threa dB Pop Head A B Pop A B A Head C C B C Head Push A Head node* old_head = head; if (head == 0) break; node* next_node = old_head->next; if (CAS(&head, old_head, next_node)) break;
  • 12. Solute ABA Problem ● LL/SC ○ It would return false when target have done a "write" action ● CAS2 ○ Add a versioned value
  • 13. Example - Stack(fix Pop) class Stack { volatile Node* head; volatile int version; public: void Push(Node* node); void Pop(); Stack() : head(0), version(0) {} }; Add Version void Stack:: Pop() { while tru ( e) { Check Version } } node* old_head = head; int old_version = version; if (head == 0) break; node* next_node = old_head->next; if (CAS2(&head, old_head, old_version, next_node, old_version + 1)) break;
  • 14. Summary ● Lock-Free has Better Performance Than Blocking ● Lock-Free has no "Lock" ● Lock-Free is Hard To Implement ● Lock-Free's Spirit - Atom Operation ● Lock-Free's Trap - ABA Problem
  • 15. Notes and References ● Toby Jones - Lock-Free Algorithms(Game Programming Gems 6) ● Jean-Francois Dube - Efficient and Scalable Multi-Core Programming(Game Programming Gems 8) ● Zhou Wei Ming - Multi-core Computing and Programming
  • 17. Thanks for your attention By PanPan 2010-06-29