1461100011-ae91c83d-4025-4822-8e24-99ce5779b1b3

1. A computer-implemented method for automatically transforming a locking primitive for a shared data object to permit multiple synchronized threads of a program to simultaneously hold read-only locks on the shared data object, comprising:
performing a field access analysis on a lock word of the locking primitive for the shared data object in a header of the shared data object to determine whether a predetermined set of conditions are met, wherein the predetermined set of conditions indicate the shared data object is available to be locked by multiple read-only threads;
when the set of predetermined conditions are met, automatically transforming the locking primitive for the shared data object by setting a thread identifier field of the lock word to a predetermined value, the predetermined value not being a thread identifier and indicating that additional threads are allowed to simultaneously hold a read-only lock on the shared data object; and
incrementing a thread count in a thread count field of the lock work for each read-only lock simultaneously obtained on the shared data object, wherein a read-write lock on the shared data object is not permitted while a read-only lock exists.
2. The computer-implemented method of claim 1,
further comprising setting a fat lock contention (FLC) bit in an FLC field of the lock word pursuant to an attempt by a thread to establish the read-write lock on the shared data object subsequent to setting the thread identifier to the preselected value and incrementing the thread count.
3. The computer-implemented method of claim 1, wherein the method is carried out at compile time of program code associated with the shared data object.
4. The computer-implemented method of claim 1, wherein the predetermined set of conditions includes a lack of a write command to global data objects or global variables in a synchronized region of program code associated with locking the shared data object.
5. The computer-implemented method of claim 1, wherein the predetermined set of conditions includes a lack of nested locks in a synchronized region of program code associated with locking the shared data object.
6. The computer-implemented method of claim 1, wherein the predetermined set of conditions includes a read-only restriction for a synchronized region of program code associated with locking the shared data object.
7. A computer-implemented method for establishing multiple read-only locks on a shared data object by multiple synchronized threads of a program, comprising:
providing a lock word for the shared data object in an object header of the shared data object that includes a thread identifier field, a thread count field, flat lock contention field and a lock inflation field;
examining the thread identifier field to determine if a read-write lock currently exists on the shared data object pursuant to an attempt by a first thread to obtain a read-only lock on the shared data object, wherein the thread identifier field will contain a value indicating there is a read-write lock on the shared data object when a read-write lock currently exists on the shared data object;
incrementing a thread count in the thread count field to establish a first read-only lock on the shared data object by the first thread if the read-write lock has not been established, and wherein a read-write lock on the shared data object is not permitted while a read-only lock exists; and
setting a thread identifier in the thread identifier field to a predetermined value indicative of read-only locks by a thread establishing the read-only lock, the predetermined value not being a thread identifier, wherein the presence of the predetermined value in the thread identifier field indicates additional threads can simultaneously establish read-only locks on the shared data object.
8. The computer-implemented method of claim 7, further comprising:
examining the thread identifier field to determine if the read-write lock currently exists on the shared data object pursuant to an attempt by a second thread to simultaneously obtain a second read-only lock on the shared data object; and
incrementing the thread count to simultaneously establish the second read-only lock if the read-write lock has not been established.
9. The computer-implemented method of claim 7, further comprising examining the thread identifier field to determine if the read-only lock currently exists on the shared data object, as indicated by the presence of the predetermined value in the thread identifier field, pursuant to an attempt by a second thread to simultaneously obtain a second read-only lock on the shared data object; and
incrementing the thread count to simultaneously establish the second read-only lock upon detecting the presence of the predetermined value in the thread identifier field.
10. The computer-implemented method of claim 7, wherein the predetermined value comprises zero.
11. The computer-implemented method of claim 7, further comprising setting a fat lock contention (FLC) bit in an FLC field of the lock word pursuant to an attempt by a third thread to establish the read-write lock on the shared data object.
12. The computer-implemented method of claim 7, further comprising:
decrementing the thread count pursuant to a release of the second read-only lock by the second thread; and
decrementing the thread count pursuant to a release of the first read-only lock by the first thread.
13. A computerized system implemented in hardware, the hardware programmed to execute instruction code for establishing multiple read-only locks by synchronized threads of a program on a shared data object, comprising:
an analysis system established by the computerized system for examining a thread identifier in a thread identifier field of a lock word associated with the shared data object in a header of the shared data object to determine if a read-write lock currently exists on the shared data object pursuant to an attempt by a first thread to obtain a read-only lock on the shared data object, wherein the thread identifier field will contain a value indicating there is a read-write lock on the shared data object when a read-write lock currently exists on the shared data object;
a count system established by the computerized system for incrementing a thread count in a thread count field of the lock word to establish a first read-only lock on the shared data object by the first thread if the read-write lock has not been established, wherein a read-write lock on the shared data object is not permitted while a read-only lock exists; and
a thread identifier system established by the computerized system for setting a thread identifier in the thread identifier field to a predetermined value indicative of read-only locks, the predetermined value not being a thread identifier, wherein the presence of the predetermined value in the thread identifier field indicates additional threads can simultaneously establish read-only locks on the shared data object.
14. The computerized system of claim 13, wherein the analysis system further examines the thread identifier field to check for the predetermined value pursuant to an attempt by a second thread to simultaneously obtain a second read-only lock on the shared data object, and wherein the count system further increments the thread count to simultaneously establish the second read-only lock if the predetermined value is present.
15. The computerized system of claim 13, wherein the predetermined value comprises zero.
16. The computerized system of claim 13, further comprising an inflation system for setting an inflation bit in an inflation field of the lock word pursuant to an attempt by a third thread to establish the read-write lock on the shared data object.
17. The computerized system of claim 13, wherein the count system further decrements the thread count for each release of the second read-only lock and the first read-only lock.
18. A computer program product stored on a recordable medium for establishing multiple read-only locks by synchronized threads of a program on a shared data object, which when executed, comprises:
program code for examining a thread identifier in a thread identifier field of a lock word associated with the shared data object in a header of the shared data object to determine if a read-write lock currently exists on the shared data object pursuant to an attempt by a first thread to obtain a read-only lock on the shared data object, wherein the thread identifier field will contain a value indicating there is a read-write lock on the shared data object when a read-write lock currently exists on the shared data object;
program code for incrementing a thread count in a thread count field of the lock word to establish a first read-only lock on the shared data object by the first thread if the read-write lock has not been established, wherein a read-write lock on the shared data object is not permitted while a read-only lock exists; and
program code for setting a thread identifier in the thread identifier field to a predetermined value indicative of read-only locks, the predetermined value not being a thread identifier, wherein the presence of the predetermined value in the thread identifier field indicates additional threads can simultaneously establish read-only locks on the shared data object.
19. The program product of claim 18, wherein the program code for examining further examines the thread identifier field to check for the predetermined value pursuant to an attempt by a second thread to simultaneously obtain a second read-only lock on the shared data object, and wherein the program code for incrementing further increments the thread count to simultaneously establish the second read-only lock if the predetermined value is present.
20. The program product of claim 18, wherein the predetermined value comprises zero.
21. The program product of claim 18, further comprising program code for setting an inflation bit in an inflation field of the lock word pursuant to an attempt by a third thread to establish the read-write lock on the shared data object.
22. The program product of claim 20, further comprising program code for decrementing the thread count for each release of the second read-only lock and the first read-only lock.
23. A method for deploying an application for establishing multiple read-only locks by synchronized threads of a program on a shared data object, comprising:
providing a computer infrastructure being operable to:
examine a thread identifier in a thread identifier field of a lock word associated with the shared data object in a header of the shared data object to determine if a read-write lock currently exists on the shared data object pursuant to an attempt by a first thread to obtain a read-only lock on the shared data object, wherein the thread identifier field will contain a value indicating there is a read-write lock on the shared data object when a read-write lock currently exists on the shared data object;
increment a thread count in a thread count field of the lock word to establish a first read-only lock on the shared data object by the first thread if the read-write lock has not been established, wherein a read-write lock on the shared data object is not permitted while a read-only lock exists; and

set a thread identifier in the thread identifier field to a predetermined value indicative of read-only locks, the predetermined value not being a thread identifier, wherein the presence of the predetermined value in the thread identifier field indicates additional threads can simultaneously establish read-only locks on the shared data object.
24. The method of claim 23, wherein the computer infrastructure is further operable to examine the thread identifier field to check for the predetermined value pursuant to an attempt by a second thread to simultaneously obtain a second read-only lock on the shared data object, and further increment the thread count to simultaneously establish the second read-only lock if the predetermined value is present.

The claims below are in addition to those above.
All refrences to claim(s) which appear below refer to the numbering after this setence.

1-62. (canceled)
63. A method comprising:
detecting, by a computing device comprising an input device and a display, during interaction with a software application executing on the computing device, a jiggle motion of the input device detectable by detection software operating on the computing device;
analyzing, by the computing device, the jiggle motion of the input device to determine if the motion of the input device meets predetermined motion criteria;
initiating, by the computing device, if the predetermined motion criteria are met, a software operation associated with the jiggle motion; and
not initiating the software operation if the predetermined motion criteria are not met.
64. The method according to claim 63, wherein the detection software is in communication with the software application.
65. The method according to claim 63, wherein the software application comprises the detection software.
66. The method according to claim 63, wherein the software operation associated with the jiggle motion occurs within the software application.
67. The method according to claim 63, wherein the software operation associated with the jiggle motion is performed within a second software application.
68. The method according to claim 67, wherein the second software application is in communication with the detection software.
69. The method according to claim 63, wherein said software operation is a search function.
70. The method according to claim 63, wherein said software operation is a save function.
71. A method according to claim 70, wherein the save function is effective to save a document from a word-processing application to a preselected location.
72. A non-transitory computer readable storage medium comprising executable instructions tangibly stored thereon for performing a method, the method including the steps of:
detecting, by a computing device comprising an input device and a display, during interaction with a software application executing on the computing device, a jiggle motion of the input device detectable by detection software operating on the computing device;
analyzing, by the computing device, the jiggle motion of the input device to determine if the motion of the input device meets predetermined motion criteria;
initiating, by the computing device, if the predetermined motion criteria are met, a software operation associated with the jiggle motion; and
not initiating the software operation if the predetermined motion criteria are not met.
73. The non-transitory computer readable storage medium according to claim 72, wherein the detection software is in communication with the software application.
74. The non-transitory computer readable storage medium according to claim 72, wherein the software application comprises the detection software.
75. The non-transitory computer readable storage medium according to claim 72, wherein the software operation associated with the jiggle motion occurs within the software application.
76. The non-transitory computer readable storage medium according to claim 72, wherein the software operation associated with the jiggle motion is performed within a second software application.
77. The non-transitory computer readable storage medium according to claim 76, wherein the second software application is in communication with the detection software.
78. The non-transitory computer readable storage medium according to claim 72, wherein said software operation is a search function.
79. The non-transitory computer readable storage medium according to claim 72, wherein said software operation is a save function.
80. The non-transitory computer readable storage medium according to claim 79, wherein the save function is effective to save a document from a word-processing application to a preselected location.
81. A computing device comprising an input device and a display, the computing device comprising:
a data storage; and
a processor for executing instructions stored on the data storage, the instructions comprising:
detecting, by a computing device comprising an input device and a display, during interaction with a software application executing on the computing device, a jiggle motion of the input device detectable by detection software operating on the computing device;
analyzing, by the computing device, the jiggle motion of the input device to determine if the motion of the input device meets predetermined motion criteria;
initiating, by the computing device, if the predetermined motion criteria are met, a software operation associated with the jiggle motion; and
not initiating the software operation if the predetermined motion criteria are not met.
82. The computing device according to claim 81, wherein the detection software is in communication with the software application.