IP Library Granted Patent US 7,836,280
Granted Patent B1
US 7,836,280 · App. 11/227,418 · Granted Nov 16, 2010

Dynamic concurrent atomic execution

Assignee: Azul Systems, Inc.
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 7,836,280
App. No.
11/227,418
Granted
Nov 16, 2010
Kind
B1
Abstract

Executing a set of one or more instructions atomically is disclosed. Executing includes determining whether speculatively executing the instructions is advised based at least in part on dynamic information associated with synchronization data and speculatively executing the instructions when it is determined that speculatively executing the instructions is advised.

Claims (52)

1. A method of executing a set of one or more instructions, including:

determining whether speculatively executing the instructions is advised based at least in part on dynamic information associated with synchronization data, wherein the dynamic information is based at least in part on a previous successful execution of the instructions by a previous thread; and

speculatively executing the instructions when it is determined that speculatively executing the instructions is advised.

2. A method as recited in claim 1 , wherein the synchronization data includes lock information.

3. A method as recited in claim 1 , wherein the synchronization data includes a mutex.

4. A method as recited in claim 1 , wherein the synchronization data includes a semaphore.

5. A method as recited in claim 1 , wherein the synchronization data includes an object associated with a Java Virtual Machine monitor.

6. A method as recited in claim 1 , wherein the synchronization data includes an object associated with a Java synchronized method.

7. A method as recited in claim 1 , wherein the synchronization data includes an object associated with a Java synchronized block.

8. A method as recited in claim 1 , wherein the synchronization data includes an object associated with a .NET synchronized method.

9. A method as recited in claim 1 , wherein the synchronization data includes an object associated with a .NET SyncBlock.

10. A method as recited in claim 1 , wherein the dynamic information is affected by whether a previous execution succeeded in executing speculatively.

11. A method as recited in claim 1 , wherein the dynamic information is affected by whether on a previous attempt to acquire a lock, lock contention was experienced.

12. A method as recited in claim 1 , wherein the dynamic information can change due to a systemic event.

13. A method as recited in claim 1 , wherein the dynamic information can change due to garbage collection.

14. A method as recited in claim 1 , wherein the dynamic information is affected by previous experience with speculatively executing the instructions.

15. A method as recited in claim 1 , wherein the dynamic information is affected by previous experience with speculatively executing a different set of instructions.

16. A method as recited in claim 1 , wherein the dynamic information is associated with one or more previous speculative executions.

17. A method as recited in claim 1 , further including acquiring a lock before executing the instructions when it is determined that speculatively executing the instructions is not advised.

18. A method as recited in claim 1 , wherein the instructions are associated with an object.

19. A method as recited in claim 1 , further including determining whether to acquire a thin or thick lock.

20. A method as recited in claim 1 , further including acquiring a thin or thick lock.

21. A method as recited in claim 1 , further including determining whether to inflate a thin lock.

22. A method as recited in claim 1 , further including determining whether to deflate a thick lock.

23. A method as recited in claim 1 , wherein executing the instructions is associated with a thread or process.

24. A method as recited in claim 1 , further including determining whether a thread that is attempting to atomically execute the instructions is already in a speculative state.

25. A method as recited in claim 1 , wherein speculatively executing includes reading lock information associated with the synchronization data after speculative execution has begun.

26. A method as recited in claim 1 , further including determining whether an object is locked.

27. A method as recited in claim 1 , further including receiving an indication that the instructions are to be executed using a synchronization mechanism.

28. A method as recited in claim 1 , wherein a Java synchronized block includes the instructions.

29. A method as recited in claim 1 , wherein a Java synchronized method includes the instructions.

30. A method as recited in claim 1 , wherein instructions executed between a lock operation and an unlock operation includes the instructions.

31. A method as recited in claim 1 , wherein the instructions are executed by a VM.

32. A method as recited in claim 1 , further including restoring the state of one or more registers when an abort indication is received.

33. A method as recited in claim 1 , further including saving a set of one or more register states in a software data structure.

34. A method as recited in claim 1 , wherein determining occurs during lock entry.

35. A method as recited in claim 1 , wherein determining occurs during lock release.

36. A method as recited in claim 1 , further including indicating a synchronization state associated with an object.

37. A method as recited in claim 1 , further including indicating a synchronization state associated with a lock object.

38. A method as recited in claim 1 , further including indicating a synchronization state associated with a Java Virtual Machine monitor object.

39. A system for executing a set of one or more instructions, including:

a processor configured to:

determine whether speculatively executing the instructions is advised based at least in part on dynamic information associated with synchronization data, wherein the dynamic information is based at least in part on a previous successful execution of the instructions by a previous thread; and

speculatively execute the instructions when it is determined that speculatively executing the instructions is advised; and

a memory coupled with the processor, wherein the memory provides the processor with instructions.

40. A computer program product for executing a set of one or more instructions, the computer program product being embodied in a computer readable storage medium and comprising computer instructions for:

determining whether speculatively executing the instructions is advised based at least in part on dynamic information associated with synchronization data, wherein the dynamic information is based at least in part on a previous successful execution of the instructions by a previous thread; and

speculatively executing the instructions when it is determined that speculatively executing the instructions is advised.

41. A method as recited in claim 25 , wherein the lock information is read before the instructions are executed.

42. A method as recited in claim 25 , wherein the lock information can be used to determine whether a synchronization mechanism has been exclusively acquired.

43. A method as recited in claim 42 , wherein the synchronization mechanism includes at least one of the following: a lock, a mutex, a semaphore, an object associated with a Java Virtual Machine monitor, an object associated with a Java synchronized method, an object associated with a Java synchronized block, an object associated with a .NET synchronized method, and an object associated with a .NET SyncBlock.

44. A method as recited in claim 25 , wherein reading lock information includes determining whether a synchronization mechanism has been exclusively acquired.

Assignments (8)
SECURITY INTEREST Recorded Dec 3, 2025
From: AZUL SYSTEMS, INC.
To: ARES CAPITAL CORPORATION, AS COLLATERAL AGENT
Reel/Frame 073828/0083 →
RELEASE OF SECURITY INTERESTS IN PATENTS RECORDED AT REEL/FRAME 052293/0121 Recorded Dec 3, 2025
From: GOLUB CAPITAL LLC, AS COLLATERAL AGENT
To: AZUL SYSTEMS, INC.
Reel/Frame 073466/0064 →
SECURITY INTEREST Recorded Apr 2, 2020
From: AZUL SYSTEMS, INC.
To: GOLUB CAPITAL LLC, AS COLLATERAL AGENT
Reel/Frame 052293/0121 →
RELEASE OF SECURITY INTEREST Recorded Feb 21, 2019
From: PARTNERS FOR GROWTH IV, L.P.
To: AZUL SYSTEMS, INC.
Reel/Frame 048411/0138 →
SECURITY INTEREST Recorded Mar 1, 2016
From: AZUL SYSTEMS, INC.
To: PARTNERS FOR GROWTH IV, L.P.
Reel/Frame 037959/0694 →
SECURITY INTEREST Recorded Feb 2, 2016
From: AZUL SYSTEMS, INC.
To: SILICON VALLEY BANK
Reel/Frame 037641/0665 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded May 2, 2006
From: TENE, GIL; POSVA, IVAN; WOLF, MICHAEL A.; GROVE, DANIEL DWIGHT; KRALJEVIC, TOM
To: AZUL SYSTEMS, INC.
Reel/Frame 017563/0757 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Dec 6, 2005
From: TENE, GIL; POSVA, IVAN; WOLF, MICHAEL A.; GROVE, DANIEL DWIGHT
To: AZUL SYSTEMS, INC.
Reel/Frame 017091/0990 →
Continuity (1)
Provisional Application 6061002800 · Sep 14, 2004