Cpu replacement for hp Model: dv6-3164si
Hi guys i normally dont ask for help i just search and search for it, but ive come up short on this one, basically i have a
hp pavillion dv6-316si with a AMD phennom 2 N950 quad core 2.1Ghz cpu and i woul like to replace it with a beter one now what i need to know is there a better cpu for this laptop and what would it be and where could i purchase it it doesnt have to be a quad core i just want something with a bigger punch than the current cpu?
many thank in advance...
This question was solved.
View Solution.
Here is the Manual:
Manual
Processor list is on page 2. You already have the second best compatible processor. The only faster one the motherboard will accept is an N970. It is not worth the hassle for .1 ghz.
You have 6 gigs of RAM and could have 8. Also, a solid state drive would add significant punch. These are about your only options to speed it up.
If this is "the Answer" please click "Accept as Solution" to help others find it.
Similar Messages
-
Where can I get a motherboard replacement for a Pavilion dv6-3020us laptop?
Where can I get a motherboard replacement for a Pavilion dv6-3020us laptop?
Have you tried to clean vents with compressed air.
Some other propositions below:
Check the link below:
How to prevent and deal with overheating.
Try to solve problem with audio by using intrcutions form the link below:
Use Hard Reset to Resolve Hardware and Software Issues
Note:
Do this for 1 minute instead 15 seconds.
** Say thanks by clicking the "Thumb up" icon which is on the left. **
** Make it easier for other people to find solutions, by marking my answer with "Accept as Solution" if it solves your issue. ** -
1st Generation 2 Gbyte Motherboard Replacement for Model No.A1137 needed, please...
Quote from: vernonion on 27-August-08, 09:51:53
Everything is not working fine, and a pop with sparks is not a normal result from turning on a power supply. If you got it from Tiger send it back and get this one.
I talked to the rep earlier, but I had to go to a meeting. When I called him back he said he was on the phone with Intel to make sure my CPU would work with that board. I know it will work so I have no clue why he called them. He didn't seem to concerned about the PSU though. I told him that the PSU popped and made sparks and it didn't phase him at all. I already told him I wanted to exchange the RAM with different kind and I wanted a new PSU. When I give him the new RAM and the PSU I want I will give this one a try.
Thank you for your help. -
dv6 hard drive failing how do i transferrer os 7 and hp info ??? I have a 500G wd replacement for it.
I have transferrer my self using WD Smart ware and a separate win 7 backed up to a WD 2T external ( win 7 backup is now struggling to back up but I do have one copy)
when new HD was put in, and repair disk put in it wouldn't pick up the back up off the WD 2 T. WIN 7 or my manual backup.
So I loaded up a win 7 32bit (off an older computer which is now parts) but it wouldn't reconis Win 7 back up on the WD 2 T.
Using WD smart ware. I did transferrer all the files over to the new HD but could only make an put it in a new folder. Not reload back to the same as it was before I had to transferrer every thing.
I am know stuck with win 7 32bit can't use all 6G memory an no Hp info on comp .+ no ordinal programs or settings install
there is probably some small thing I have mist thanks for your helpHi,
Here is a topic which helps you to clone the old HDD:
http://www.makeuseof.com/tag/5-ways-to-clone-and-copy-your-hard-drive/
Regards.
BH
**Click the KUDOS thumb up on the left to say 'Thanks'**
Make it easier for other people to find solutions by marking a Reply 'Accept as Solution' if it solves your problem. -
Replacement heatsink for CPU board for M5000
I am looking for a replacement heatsink that goes on the cpu module for an M5000. I have had no luck online or calling support. Does anyone have the part # or know where to get them.
This part cannot be ordered as separate part, you must change the complete CPU module.
But why do you need to replace the heatsink ? -
My pavilion dv6 3031sa has the wrong GPU for its model
So I bought a new system board for my laptop online without knowing which model it came from, so I checked the Bios for the product number which is XB531EA#ABU. Then I checked HP drivers website and entered the product number which said the model number is Dv6-3031sa. When I researched the specifications for that model, it says the GPU in this board should be Radeon HD 5470m. However driver updates detected Radeon 5650m, hardware Ids in device manager confirms it is a 5650m
PCI\VEN_1002&DEV_68C1&SUBSYS_1440103C&REV_00
PCI\VEN_1002&DEV_68C1&SUBSYS_1440103C
PCI\VEN_1002&DEV_68C1&CC_030000
PCI\VEN_1002&DEV_68C1&CC_0300
It is a better GPU so I'm not complaining, just windering why the model and GPU's down match. Thanks
This question was solved.
View Solution.Hey @LBrad ,
The system just shows me that it is a re-engineered. No other information. If you need this you could call our technical support at 800-474-6836. If you live outside the US/Canada Region, please click the link to get the support number for your region. They will be happy to assist you immediately.
Thanks.
Please click “Accept as Solution ” if you feel my post solved your issue, it will help others find the solution.
Click the “Kudos, Thumbs Up" on the bottom to say “Thanks” for helping! -
Give a list of supported processors for notebook HP dv6-6158er , Can I install Core i7 2720qm?
Hi:
Below is the link to the service manual for your notebook.
http://h10032.www1.hp.com/ctg/Manual/c02842252.pdf
Supported Intel processors are listed in Chapter 1, page 2.
You cannot install an Intel quad core processor without also replacing the motherboard.
You can only install a dual core processor in your specific model since you have an i3 processor.
So that means the best processor you can go to is the Intel Core i7-2620M 2.70-GHz (SC turbo up to 3.40-
GHz) processor (4.0-MB L3 cache, dual core, 35 W).
If you look at chapter 3, at the list of motherboards starting on page 27, you will see that there are different motherboards based on # of cores and the different graphics chips on the boards.
Paul -
New Macbook a good replacement for 12" Powerbook?
I think, besides the inch in display difference, that the new macbook WOULD HAVE made a GREAT GREAT GREAT replacement for users loving or wanting the portability, yet pro versatility of the old 12" Powerbooks. I think however that Apple has missed the mark in one BIG BIG WAY! Firewire. People who wanted something like the 12" powerbook wanted the power of the Macbook Pro in a smaller package. Apple hit the nail on the head with incorporating the same graphics performance, by using aluminum, by making it lighter, and by putting in the illuminated keyboard (only in the 2.4 model though). But on the last detail, they missed it. Firewire. there is no workaround. period. Why preload the systems with iMovie when you can't import video from MOST modern digital camcorders? WITHOUT EVEN introducing a new port with adapters (like they did with the Display Port). I think I would've sold my old macbook pro and had instantly purchased the new macbook if Apple had just included that one VITAL port. I would even prefer them putting it in the place of one of the two USB ports. But without being able to import video from my NEW minidv, there is just no way i could buy that macbook and call myself a proud mac owner. What kind of digital hub would that be? Isn't your slogan "works right out of the box."...? what do you guys think about the new macbook being a 12" powerbook replacement??
I have the same situation. I wanted to upgrade from my 12" Powerbook and would move up to the 13" screen of the new MacBook (15" is much too big for my needs). Another family member has the 15" Powerbook and has always liked my smaller size. I was ready to order 2 of the 13" MacBooks and was then stunned to see that Firewire was missing. I have a Sony DV camcorder for movies. It appears Apple expects me to use my old Powerbooks to input the video into iMovie and then transfer it over to my new MacBook. This is not the cutting edge Apple Computer Company that I have been a customer of for 25 years.
If Apple wants to add firewire to the new MacBooks, develop a USB / Ethernet to firewire adapter, or add a 13" MacBook Pro (w/ firewire) to the line-up, they will have a customer. Otherwise, I will hold onto my old Powerbooks until this is corrected. -
A replacement for the Quicksort function in the C++ library
Hi every one,
I'd like to introduce and share a new Triple State Quicksort algorithm which was the result of my research in sorting algorithms during the last few years. The new algorithm reduces the number of swaps to about two thirds (2/3) of classical Quicksort. A multitude
of other improvements are implemented. Test results against the std::sort() function shows an average of 43% improvement in speed throughout various input array types. It does this by trading space for performance at the price of n/2 temporary extra spaces.
The extra space is allocated automatically and efficiently in a way that reduces memory fragmentation and optimizes performance.
Triple State Algorithm
The classical way of doing Quicksort is as follows:
- Choose one element p. Called pivot. Try to make it close to the median.
- Divide the array into two parts. A lower (left) part that is all less than p. And a higher (right) part that is all greater than p.
- Recursively sort the left and right parts using the same method above.
- Stop recursion when a part reaches a size that can be trivially sorted.
The difference between the various implementations is in how they choose the pivot p, and where equal elements to the pivot are placed. There are several schemes as follows:
[ <=p | ? | >=p ]
[ <p | >=p | ? ]
[ <=p | =p | ? | >p ]
[ =p | <p | ? | >p ] Then swap = part to middle at the end
[ =p | <p | ? | >p | =p ] Then swap = parts to middle at the end
Where the goal (or the ideal goal) of the above schemes (at the end of a recursive stage) is to reach the following:
[ <p | =p | >p ]
The above would allow exclusion of the =p part from further recursive calls thus reducing the number of comparisons. However, there is a difficulty in reaching the above scheme with minimal swaps. All previous implementation of Quicksort could not immediately
put =p elements in the middle using minimal swaps, first because p might not be in the perfect middle (i.e. median), second because we don’t know how many elements are in the =p part until we finish the current recursive stage.
The new Triple State method first enters a monitoring state 1 while comparing and swapping. Elements equal to p are immediately copied to the middle if they are not already there, following this scheme:
[ <p | ? | =p | ? | >p ]
Then when either the left (<p) part or the right (>p) part meet the middle (=p) part, the algorithm will jump to one of two specialized states. One state handles the case for a relatively small =p part. And the other state handles the case for a relatively
large =p part. This method adapts to the nature of the input array better than the ordinary classical Quicksort.
Further reducing number of swaps
A typical quicksort loop scans from left, then scans from right. Then swaps. As follows:
while (l<=r)
while (ar[l]<p)
l++;
while (ar[r]>p)
r--;
if (l<r)
{ Swap(ar[l],ar[r]);
l++; r--;
else if (l==r)
{ l++; r--; break;
The Swap macro above does three copy operations:
Temp=ar[l]; ar[l]=ar[r]; ar[r]=temp;
There exists another method that will almost eliminate the need for that third temporary variable copy operation. By copying only the first ar[r] that is less than or equal to p, to the temp variable, we create an empty space in the array. Then we proceed scanning
from left to find the first ar[l] that is greater than or equal to p. Then copy ar[r]=ar[l]. Now the empty space is at ar[l]. We scan from right again then copy ar[l]=ar[r] and continue as such. As long as the temp variable hasn’t been copied back to the array,
the empty space will remain there juggling left and right. The following code snippet explains.
// Pre-scan from the right
while (ar[r]>p)
r--;
temp = ar[r];
// Main loop
while (l<r)
while (l<r && ar[l]<p)
l++;
if (l<r) ar[r--] = ar[l];
while (l<r && ar[r]>p)
r--;
if (l<r) ar[l++] = ar[r];
// After loop finishes, copy temp to left side
ar[r] = temp; l++;
if (temp==p) r--;
(For simplicity, the code above does not handle equal values efficiently. Refer to the complete code for the elaborate version).
This method is not new, a similar method has been used before (read: http://www.azillionmonkeys.com/qed/sort.html)
However it has a negative side effect on some common cases like nearly sorted or nearly reversed arrays causing undesirable shifting that renders it less efficient in those cases. However, when used with the Triple State algorithm combined with further common
cases handling, it eventually proves more efficient than the classical swapping approach.
Run time tests
Here are some test results, done on an i5 2.9Ghz with 6Gb of RAM. Sorting a random array of integers. Each test is repeated 5000 times. Times shown in milliseconds.
size std::sort() Triple State QuickSort
5000 2039 1609
6000 2412 1900
7000 2733 2220
8000 2993 2484
9000 3361 2778
10000 3591 3093
It gets even faster when used with other types of input or when the size of each element is large. The following test is done for random large arrays of up to 1000000 elements where each element size is 56 bytes. Test is repeated 25 times.
size std::sort() Triple State QuickSort
100000 1607 424
200000 3165 845
300000 4534 1287
400000 6461 1700
500000 7668 2123
600000 9794 2548
700000 10745 3001
800000 12343 3425
900000 13790 3865
1000000 15663 4348
Further extensive tests has been done following Jon Bentley’s framework of tests for the following input array types:
sawtooth: ar[i] = i % arange
random: ar[i] = GenRand() % arange + 1
stagger: ar[i] = (i* arange + i) % n
plateau: ar[i] = min(i, arange)
shuffle: ar[i] = rand()%arange? (j+=2): (k+=2)
I also add the following two input types, just to add a little torture:
Hill: ar[i] = min(i<(size>>1)? i:size-i,arange);
Organ Pipes: (see full code for details)
Where each case above is sorted then reordered in 6 deferent ways then sorted again after each reorder as follows:
Sorted, reversed, front half reversed, back half reversed, dithered, fort.
Note: GenRand() above is a certified random number generator based on Park-Miller method. This is to avoid any non-uniform behavior in C++ rand().
The complete test results can be found here:
http://solostuff.net/tsqsort/Tests_Percentage_Improvement_VC++.xls
or:
https://docs.google.com/spreadsheets/d/1wxNOAcuWT8CgFfaZzvjoX8x_WpusYQAlg0bXGWlLbzk/edit?usp=sharing
Theoretical Analysis
A Classical Quicksort algorithm performs less than 2n*ln(n) comparisons on the average (check JACEK CICHON’s paper) and less than 0.333n*ln(n) swaps on the average (check Wild and Nebel’s paper). Triple state will perform about the same number of comparisons
but with less swaps of about 0.222n*ln(n) in theory. In practice however, Triple State Quicksort will perform even less comparisons in large arrays because of a new 5 stage pivot selection algorithm that is used. Here is the detailed theoretical analysis:
http://solostuff.net/tsqsort/Asymptotic_analysis_of_Triple_State_Quicksort.pdf
Using SSE2 instruction set
SSE2 uses the 128bit sized XMM registers that can do memory copy operations in parallel since there are 8 registers of them. SSE2 is primarily used in speeding up copying large memory blocks in real-time graphics demanding applications.
In order to use SSE2, copied memory blocks have to be 16byte aligned. Triple State Quicksort will automatically detect if element size and the array starting address are 16byte aligned and if so, will switch to using SSE2 instructions for extra speedup. This
decision is made only once when the function is called so it has minor overhead.
Few other notes
- The standard C++ sorting function in almost all platforms religiously takes a “call back pointer” to a comparison function that the user/programmer provides. This is obviously for flexibility and to allow closed sourced libraries. Triple State
defaults to using a call back function. However, call back functions have bad overhead when called millions of times. Using inline/operator or macro based comparisons will greatly improve performance. An improvement of about 30% to 40% can be expected. Thus,
I seriously advise against using a call back function when ever possible. You can disable the call back function in my code by #undefining CALL_BACK precompiler directive.
- Like most other efficient implementations, Triple State switches to insertion sort for tiny arrays, whenever the size of a sub-part of the array is less than TINY_THRESH directive. This threshold is empirically chosen. I set it to 15. Increasing this
threshold will improve the speed when sorting nearly sorted and reversed arrays, or arrays that are concatenations of both cases (which are common). But will slow down sorting random or other types of arrays. To remedy this, I provide a dual threshold method
that can be enabled by #defining DUAL_THRESH directive. Once enabled, another threshold TINY_THRESH2 will be used which should be set lower than TINY_THRESH. I set it to 9. The algorithm is able to “guess” if the array or sub part of the array is already sorted
or reversed, and if so will use TINY_THRESH as it’s threshold, otherwise it will use the smaller threshold TINY_THRESH2. Notice that the “guessing” here is NOT fool proof, it can miss. So set both thresholds wisely.
- You can #define the RANDOM_SAMPLES precompiler directive to add randomness to the pivoting system to lower the chances of the worst case happening at a minor performance hit.
-When element size is very large (320 bytes or more). The function/algorithm uses a new “late swapping” method. This will auto create an internal array of pointers, sort the pointers array, then swap the original array elements to sorted order using minimal
swaps for a maximum of n/2 swaps. You can change the 320 bytes threshold with the LATE_SWAP_THRESH directive.
- The function provided here is optimized to the bone for performance. It is one monolithic piece of complex code that is ugly, and almost unreadable. Sorry about that, but inorder to achieve improved speed, I had to ignore common and good coding standards
a little. I don’t advise anyone to code like this, and I my self don’t. This is really a special case for sorting only. So please don’t trip if you see weird code, most of it have a good reason.
Finally, I would like to present the new function to Microsoft and the community for further investigation and possibly, inclusion in VC++ or any C++ library as a replacement for the sorting function.
You can find the complete VC++ project/code along with a minimal test program here:
http://solostuff.net/tsqsort/
Important: To fairly compare two sorting functions, both should either use or NOT use a call back function. If one uses and another doesn’t, then you will get unfair results, the one that doesn’t use a call back function will most likely win no matter how bad
it is!!
Ammar MuqaddasThanks for your interest.
Excuse my ignorance as I'm not sure what you meant by "1 of 5" optimization. Did you mean median of 5 ?
Regarding swapping pointers, yes it is common sense and rather common among programmers to swap pointers instead of swapping large data types, at the small price of indirect access to the actual data through the pointers.
However, there is a rather unobvious and quite terrible side effect of using this trick. After the pointer array is sorted, sequential (sorted) access to the actual data throughout the remaining of the program will suffer heavily because of cache misses.
Memory is being accessed randomly because the pointers still point to the unsorted data causing many many cache misses, which will render the program itself slow, although the sort was fast!!.
Multi-threaded qsort is a good idea in principle and easy to implement obviously because qsort itself is recursive. The thing is Multi-threaded qsort is actually just stealing CPU time from other cores that might be busy running other apps, this might slow
down other apps, which might not be ideal for servers. The thing researchers usually try to do is to do the improvement in the algorithm it self.
I Will try to look at your sorting code, lets see if I can compile it. -
Blue screen with error code and I have no recovery disks for HP Pavilion dv6-1260se
I have a HP Pavilion dv6-1260se with factory installed operating system of Vista. When booting up the computer, I receive a blue screen with this error message: STOP: c000021a {Fatal System Error}.
The verification of a KnownDLL failed. system process terminated unexpectedly with
a status of 0x0000221 (0x007fb9c0 0x00000000).
The system has been shut down.
I do not have recovery disks for this computer. I tried to order them but them seem to not be available. This is my daughter's computer. She says she started to have trouble after downloading Frost Wire (music share) and then she removed it. We tried going back to an earlier time and that didn't help and then the blue screen with error message appeared. What do I do now?
This question was solved.
View Solution.Hi,
Assuming your in the US, recovery discs are available to order for that model here. That may be the best option.
You should also be able to do a recovery without the discs as well. Take a look at this document: Recover Windows Vista Operating System Using HP Recovery, and look for the section Restore the PC to its original condition with the HP Recovery Manager if Windows Vista is not accessible. This should allow you to recover the PC.
R
Although I am an HP Employee, I am speaking for myself and not for HP. -
Double Factory pattern purposal as replacement for Double Check #2
Hi All,
Here is the code for the pattern proposal, its intended as a replacement for double checked locking, which was proved to be broken in 2001. Here is the code...
public class DoubleFactory {
private static Object second_reference = null;
public static Object getInstance() {
Object toRet = second_reference;
if (toRet == null) {
second_reference = CreationFactory.createInstance();
toRet = second_reference;
return toRet;
private DoubleFactory() {}
public class CreationFactory {
private static Object instance = null;
public static synchronized Object createInstance() {
if (instance == null) {
instance = new Object();
return instance;
}Also I have spent several months discussing this with Peter Haggar, who believes that this code is not guaranteed to work. However I have been unable to discern from his message why he believes this will not be guaranteed to work, and I am posting this here to attempt to find a clearer explanation or confirmation that the pattern I am purposing (Double Factory) is guaranteed to work.
Thanks,
Scott
---------------------------- Original Message ----------------------------
Subject: Re: [Fwd: Double Factory replacement for Double Check #2] From:
"Scott Morgan" <[email protected]>
Date: Fri, January 25, 2008 10:36 pm
To: "Peter Haggar" <[email protected]>
Hi Peter,
I appologize if my last response came accross as rude or something. If
my code is not guaranteed to work ok, can you help me understand why. I
am after all looking for a solution for all of us.
If my solution is wrong as you say because the member variables of the
singleton are not up to date. I understand this to mean that the
second_reference pointer is assigned to the memory where the instance
object will get created before the instance object even starts the
creation process (when the jvm allocates memory and then enters the
constructor method of the Singleton). This doesn't seem possible to me.
Can you refrase your statments, to help me understand your points?
If not I am happy to turn to the original wiki for discussion.
Thanks for your effort,
Scott
Thanks for asking my opinion, many times, then telling me I'm
wrong...wonderful. You are a piece of work my friend. For what it'sworth, your email below shows you still don't understand these issues
or what I was saying in my emails. I've been more than patient.
>
All the best. And by the way, your code is not guaranteed to work. It's not just me that's "wrong", it's also the engineers at Sun who
designed Java, the JVM, and the memory model, and countless people who
have studied it. I'm glad you have it all figured out.
>
Peter
"Scott Morgan" <[email protected]>
01/18/2008 12:47 PM
Please respond to
[email protected]
To
Peter Haggar/Raleigh/IBM@IBMUS
cc
Subject
Re: [Fwd: Double Factory replacement for Double Check #2]
Hi Peter,
Thanks I understand your position now. However am I still believe that
it will work and be safe;
1) the Singleton you show would be fully constructed (having exited theSingleton() method) before the createInstance() method would have
returned.
2) The second_reference could not be assigned until the createInstance()
method returns.
3) So by the time second_reference points to Singleton all of the valueswill be set.
>
>
I do understand that if the createInstance method was not synchronized(at the CreationFactory class level) that my logic would be flawed, but
since there is synchronization on that method these points are true, and
your comments about up-to-date values are not accurate.
>
Cheers,
Scott
>In your listing from your latest email T2 does encounter a sync block
on createInstance.
>>>>
No. T2 will call getInstance and see second_reference as non-null.second_reference was made non-null by T1.
>>
>>>>
What are you exactly are you refering to with the phrase 'up-to-datevalues'?
>>>>
Assume my singleton ctor is thus:
public class Singleton
private int i;
private long l;
private String str;
public Singleton()
i = 5;
l = 10;
str = "Hello";
T2 will get a reference to the Singleton object. However, because youaccess second_reference without synchronization it may not see i as 5,
l as 10 and str as "Hello". It may see any of them as 0 or null. This
is not the out of order write problem, but is a general visibility
problem because you are accessing a variable without proper
synchronization.
>>
Peter
"Scott Morgan" <[email protected]>
01/16/2008 11:38 PM
Please respond to
[email protected]
To
Peter Haggar/Raleigh/IBM@IBMUS
cc
Subject
Re: [Fwd: Double Factory replacement for Double Check #2]
Hi Peter,
In your listing from your latest email T2 does encounter a sync blockon createInstance.
>>
What are you exactly are you refering to with the phrase 'up-to-datevalues'?
In this code the Singleton should also be
A) non mutable (as in the instance of class Object in the example).
If the singleton was more complex then the code to populate it'svalues
would go inside the sync of createInstance().
B) mutable with synchronization on it's mutator methods.
In your article you mention out of order writes, which doesn't occurin
this code.
Cheers,
Scott
You read it wrong.
- T1 calls getInstance which in turn calls createInstance.
- T1 constructs the singleton in createInstance and returns to
getInstance.
- T1 sets second_reference to the singleton returned in getInstance. -T1 goes about its business.
- T2 calls createInstance.
- T2 sees second_reference as non-null and returns it
- Since T2 accessed second_reference without sync, there is noguarantee
that T2 will see the up-to-date values for what this object refers to.
- Therefore the code is not guaranteed to work.
>>>
If this is not clear:
- Re-read my email below
- Re-read my article
- If still not clear, google on Double Checked Locking and readanything
from Brian Goetz or Bill Pugh.
Peter
"Scott Morgan" <[email protected]>
01/13/2008 05:26 AM
Please respond to
[email protected]
To
Peter Haggar/Raleigh/IBM@IBMUS
cc
Subject
Re: [Fwd: Double Factory replacement for Double Check #2]
Hi Peter,
Thanks for the reply, I don't see how T2 would see the a referenceto
a
partialy initialized object before the createInstance() method had
returned. If T1 was in createInstance() when T2 entered
getInstance(), T2 would wait on the CreationFactory's class monitor to
wait to enter createInstance().
Or in other words in the line of code ....
second_reference = CreationFactory.createInstance();
The pointer second_reference couldn't be assigned to the singleton
instance when the synchronized createInstance() had fully constructed,initialized and returned the singleton instance. Before that the the
second_reference pointer would always be assigned to null. So any
thread entering getInstance() before createInstance() had returned
(for the first time) would wait on the CreationFactory's class monitor
and enter the createInstance() method.
>>>
So T2 will wait for T1.
Cheers,
Scott
PS I think I am writing requirements for my next project :)
Sorry for the delay...been in all day meetings this week.
You are correct...I had been reading your code wrong, my apologies.
My explanations, although correct, did not exactly correspond to your
code.
However, the code is still not guaranteed to work. Here's why:
Assume T1 calls getInstance() which calls createInstance() and returnsthe
singelton. It then sets second_reference to refer to that singleton.
So
far, so good. Now, T2 executes and calls getInstance(). It can see
second_reference as non-null, so it simply returns it. But, there
was
no
synchronization in T2's code path. So there's no guarantee that even
if
T2 sees an up-to-date value for the reference, that it will seeup-to-date
values for anything else, ie what the object refers to...it's
instance data. If T2 used synchronization, it would ensure that it
read
up-to-date
values when it obtained the lock. Because it didn't, it could see
stale
values for the object's fields, which means it could see a partially
constructed object.
>>>>
In the typical double-checked locking, the mistake is to assume theworst
case is that two threads could race to initialize the object. But
the worst case is actually far worse -- that a thread uses an object
which
it
believes to be "fully baked" but which is in fact not.
Peter
"Scott Morgan" <[email protected]>
01/03/2008 06:33 PM
Please respond to
[email protected]
To
Peter Haggar/Raleigh/IBM@IBMUS
cc
Subject
Re: [Fwd: Double Factory replacement for Double Check #2]
Hi Peter,
Thanks for responding, I am still thinking that your mis
interpreting
the code so I have rewritten it here (Replacing
DoubleFactory.instance with DoubleFactory.second_reference for
clarity). If the T1 burps (gets interrupted) in the createInstance
method it wouldn't have returned so the second_reference pointer
would have never been
assigned
so T2 would just try again upon entering the getInstance method. Orif
it had already entered getInstance it would be waiting to enter
(until T1 releases the lock on CreationFactory.class ) on the
createInstance method.
>>>>
public class DoubleFactory {
private static Object second_reference = null;
public static Object getInstance() {
Object toRet = second_reference;
if (toRet == null) {
second_reference =
CreationFactory.createInstance();
toRet = second_reference;
return toRet;
private DoubleFactory() {}
public class CreationFactory {
private static Object instance = null;
public static synchronized Object createInstance() {
if (instance == null) {
instance = new Object();
return instance;
Does this clear up my idea at all?
second_reference should be always pointing to
null
or
a fully initialized Object
(also referenced by the pointer named 'instance' ), I don't see howit would end up partially initialized.
>>>>
Thanks Again,
Scott
"It" refers to T2.
Your createInstance method is identical to my Listing 2 and is fine
and
will work.
Yes, the problem with your code is in getInstance.
>I don't see how the DoubleFactory getInstance method could bereturning
a partially initialized object at this point. If CreationFactoryalways
returns a fully initialized object and DoubleFactory only assigns a
new
reference/pointer to it how could DoubleFactory getInstance return a
reference/pointer to partially initialized object?
>>>>>>>
>>>>>
The reason it is not guaranteed to work is explained in my previousemails
and in detail in the article. However, I'll try again. Anytime you
access shared variables from multiple threads without proper
synchronization, your code is not guaranteed to work. Threads are
allowed
to keep private working memory separate from main memory. There are
2
distinct points where private working memory is reconciled with main
memory:
- When using a synchronized method or block - on acquisition of thelock
and when it is released.
- If the variable is declared volatile - on each read or write of
that
volatile variable. (Note, this was broken in pre 1.5 JVMs which isthe
reason for the caveat I previously mentioned)
Your createInstance method uses synchronization, therefore, the
reconciliation happens on lock acquisition and lock release. T1 can
acquire the lock in createInstance, make some updates (ie create an
object, run it's ctor etc), but then get interrupted before exiting
createInstance and therefore before releasing the lock. Therefore,
T1
has
not released the lock and reconciled its private working memory withmain
memory. Therefore, you have ZERO guarantee about the state of mainmemory
from another threads perspective. Now, T2 comes along and accesses
"instance" from main memory in your getInstance method. What will
T2
see?
Since it is not properly synchronized, you cannot guarantee that T2sees
the values that T1 is working with since T1 may not have completely
flushed its private working memory back to main memory. Maybe it
did completely flush it, maybe it didn't. Since T1 still hold the
lock,
you
cannot guarantee what has transpired. Maybe your JVM is not usingprivate
working memory. However, maybe the JVM your code runs on does or
will
some day.
Bottom line: Your code is not properly synchronized and is notguaranteed
to work. I hope this helps.
Peter
"Scott Morgan" <[email protected]>
01/03/2008 12:49 PM
Please respond to
[email protected]
To
Peter Haggar/Raleigh/IBM@IBMUS
cc
Subject
Re: [Fwd: Double Factory replacement for Double Check #2]
Hi Peter,
Thanks for your response, I don't follow what 'it' refers to in
the
phrase 'It can see'. So for the same reason that you state that
example 2 from your article I believe this class CreationFactory to
work flawlessly when a client object calls the createInstance
method.
>>>>>
I see this CreationFactory code as identical to your example 2 doyou agree with this?
>>>>>
public class CreationFactory {
private static Object instance = null;
public static synchronized Object createInstance() {
if (instance == null) {
instance = new Object();
return instance;
}Then my rational in the DoubleFactory class is that it can obtain a
reference/pointer to the fully initialized object returned bycalling the above code. I believe you think that the problem with
my code is
in
the DoubleFactorys getInstance method, is this correct?
I don't see how the DoubleFactory getInstance method could bereturning
a partially initialized object at this point. If CreationFactory
always
returns a fully initialized object and DoubleFactory only assigns a
new
reference/pointer to it how could DoubleFactory getInstance return a
reference/pointer to partially initialized object?
>>>>>
Thanks again,
Scott
public static synchronized Singleton getInstance() //0
if (instance == null) //1
instance = new Singleton(); //2
return instance; //3
This above code is fine and will work flawlessly.
Annotating my paragraph:
T1 calls getInstance() and obtains the class lock at //0. T1 "sees"
instance as null at //1 and therefore executes: instance = new
Singleton() at //2. Now, instance = new Singleton() is made up of
several lines of non-atomic code. Therefore, T1 could be
interrupted
after Singleton is created but before Singleton's ctor isrun...somewhere
before all of //2 completes. T1 could also be interrupted after
//2 completes, but before exiting the method at //3. Since T1 has
not
exited
its synchronized block it has not flushed its cache. Now assume T2
then
calls getInstance().
All still true to this point. However, with your code the nextparagraph
is possible, with the code above, it's not. The reason is that T2
would
never enter getInstance() above at //0 because T1 holds the lock. T2will
block until T1 exits and flushes it's cache. Therefore, the code
above
is
properly thread safe.
It can "see" instance to be non-null and thus
return it. It will return a valid object, but one in which its ctor
has
not yet run or an object whose
values have not all been fully flushed since T1 has not exited itssync
block.
"Scott Morgan" <[email protected]>
01/02/2008 06:10 PM
Please respond to
[email protected]
To
Peter Haggar/Raleigh/IBM@IBMUS
cc
Subject
Re: [Fwd: Double Factory replacement for Double Check #2]
Hi Peter,
Thanks for the response I understand the rational for inventing
the
double check anti pattern, I am sorry I still don't understand the
difference between your solution #2 and my CreationFactory class.
>>>>>>
From your article figure 2.public static synchronized Singleton getInstance() //0
if (instance == null) //1
instance = new Singleton(); //2
return instance; //3
If I understand your email correctly this figure 2 is also flawed,since...
>>>>>>
T1 calls getInstance() and obtains the class lock at //0. T1 "sees"
instance as null at //1 and therefore executes: instance = new
Singleton() at //2. Now, instance = new Singleton() is made up ofseveral lines of non-atomic code. Therefore, T1 could be
interrupted
after Singleton is created but before Singleton's ctor isrun...somewhere
before all of //2 completes. T1 could also be interrupted after
//2 completes, but before exiting the method at //3. Since T1 has
not
exited
its synchronized block it has not flushed its cache. Now assume T2
then
calls getInstance(). It can "see" instance to be non-null and thus
return it. It will return a valid object, but one in which its
ctor
has
not yet run or an object whose
values have not all been fully flushed since T1 has not exited itssync
block.
So is #2 is also flawed for this reason?
If so please revise your article, since I interpreted #2 as a
plausible
solution recommended by you (which lead me to the DoubleFactory
idea).
If not please help me understand the difference between #2 and my
CreationFactory class.
>>>>>>
Thanks,
Scott
#2 is in Listing 2 in the article. What I meant was to forget the
DCL
idiom, and just synchronize the method...that's what listing 2
shows.
DCL
was invented to attempt to get rid of the synchronization for 99.9%
of
the
accesses.
The solution I outlined in my email is using the DCL idiom, but on
a
1.5
or later JVM and using volatile.
You solution is not guaranteed to work. Here's why:
public class DoubleFactory {
private static Object instance = null;
public static Object getInstance() {
Object toRet = instance;
if (toRet == null) {
instance =
CreationFactory.createInstance();
toRet = instance;
return toRet;
private DoubleFactory() {}
public class CreationFactory {
private static Object instance = null;
public static synchronized ObjectcreateInstance()
//1
if (instance == null) {
instance = new Object(); //2
return instance;
} //3
}T1 calls createInstance() and obtains the class lock at //1. T1"sees"
instance as null and therefore executes: instance = new Object() at//2.
Now, instance = new Object() is made up of several lines of
non-atomic
code. Therefore, T1 could be interrupted after Object is created
but
before Object's ctor is run...somewhere before all of //2
completes.
T1
could also be interrupted after //2 completes, but before exiting
the
method at //3. Since T1 has not exited its synchronized block ithas
not
flushed its cache. Now assume T2 then calls getInstance(). It can"see"
instance to be non-null and thus return it. It will return a
valid object, but one in which its ctor has not yet run or an
object
whose
values have not all been fully flushed since T1 has not exited itssync
block.
The bottom line is that if you are accessing shared variables
between
multiple threads without proper protection, you are open for aproblem.
Proper protection is defined as: proper synchronization pre 1.5,
and
proper synchronization or proper use of volatile 1.5 or after.
Therefore, if you must use the DCL idiom you have one option: -
Use DCL with volatile on a 1.5 or later JVM.
>>>>>>>
You can also forget about DCL and just use synchronization (listing2
in
my article) or use a static field (listing 10 in my article).
I hope this clears it up.
Peter
"Scott Morgan" <[email protected]>
01/02/2008 04:00 PM
Please respond to
[email protected]
To
Peter Haggar/Raleigh/IBM@IBMUS
cc
Subject
Re: [Fwd: Double Factory replacement for Double Check #2]
Hi Peter,
I apologies for not understanding but I don't see what is
different
between the solution you purposed...
2) Don't use DCL but use synchronization
and the code that I am putting forward. Perhaps I do just notunderstand
but you seem to be contradicting yourself in this email?
I understand that you are saying in #2 that this will always 'work'
with
out any issues...
public static Object instance = null;
public static synchronized Object getInstance() {
if (instance == null) {
instance = new Object();
return instance;
But first you seem to say in the email that if T1 gets
interrupted
it
may leave the instance pointing to a partially initialized object?
So as far as I understand it the createInstance method in my
CreationFactory class should be successful (always retuning a
fully initialized object) for the same reason #2 is successful.
Please keep in mind that there are two different instancepointers
in
the code I sent you, one is part of the DoubleFactory class and
the other is part of the CreationFactory class.
>>>>>>>
Thanks for your time, just looking for better solutions!
Scott
Scott,
Your solution is not guaranteed to work for various reasons
outlined
in
the article. For example, you can still return from your code apartially
initialized object. This can occur if T1 gets interrupted beforeleaving
the synchronized method createInstance() and T2 calls
getInstance().
T2
can "see" toRet/instance as non-null but partially initialized
since
T1
has not fully flushed its values.
As of 1.5, Sun fixed various issues with the memory model that
were
broken. Double Checked Locking will still break unless you usevolatile
(which was fixed in 1.5). Therefore, the following code works:
volatile Helper helper;
Helper getHelper() {
if (helper == null)
synchronized(this) {
if (helper == null)
helper = new Helper();
return helper;
but the original DCL idiom will not work. So, your options are:
1) Use DCL with volatile (above)
2) Don't use DCL but use synchronization
3) Don't use DCL, but use a static field.
#2 and #3 are outlined in my article from 2002.
Hope this helps,
Peter
"Scott Morgan" <[email protected]>
12/26/2007 04:12 PM
Please respond to
[email protected]
To
Peter Haggar/Raleigh/IBM@IBMUS
cc
Subject
[Fwd: Double Factory replacement for Double Check #2]
Hi Peter,
Thanks for the article on the out of order write problem. Whatdo
you
think of this as a solution?
TIA,
Scott
---------------------------- Original Message----------------------------
Subject: Double Factory replacement for Double Check #2
From: "Scott Morgan" <[email protected]>
Date: Wed, December 26, 2007 2:55 pm
To: [email protected]
Hi Ward,
Here is a pattern submission
Double Factory
Lazy initialization of singletons in accepted for a while usingthe
double check pattern. However it has been discovered that the
double
check pattern isn't thread safe because of the out of order write
problem. This problem occurs when Threads entering the Singleton
Factory method return with a fully constructed, but partially
initialized, Singleton object.
>>>>>>>>
Therefore: It makes sense to look for a way to initializeSingletons
in
a Lazy and Thread Safe manor. The following illustrates a fairly
simple
solution...
package foo;
public class DoubleFactory {
private static Object instance = null;
public static Object getInstance() {
Object toRet = instance;
if (toRet == null) {
instance =
CreationFactory.createInstance();
toRet = instance;
return toRet;
private DoubleFactory() {}
public class CreationFactory {
private static Object instance = null;
public static synchronized ObjectcreateInstance()
if (instance == null) {
instance = new Object();
return instance;
This gets around the out of order write problem because all
Threads
waiting on the CreationFactory's Class monitor will have a fully
constructed and initialized instance when they actually exit the
createInstance method.
>>>>>>>>
>>>>>>>>
During runtime while the Singleton instance is getting created(constructed and initialized) there may be a few Threads waiting
on
the
CreationFactory Class's objects monitor. After that period all
the
Treads
accessing
the Singleton will have unsynchronized reads to the instance,
which
will
optimize execution.
References:
http://www.ibm.com/developerworks/java/library/j-dcl.html
Copyright 2007 Adligo Inc.Scott-Morgan wrote:
Hi All,
Thanks for your comments, here are some more....
jtahlborn you state that
the only way to guarantee that a (non-final) reference assignment is visible across threads is through the use of volatile and synchronized,
From the jvm spec
http://java.sun.com/docs/books/jls/third_edition/html/memory.html
17.4.1 Shared Variables
Memory that can be shared between threads is called shared memory or heap memory.
All instance fields, static fields and array elements are stored in heap memory.
Since both the second_reference and instance fields are both static, they are shared and visible across all threads.Yes, all these things are shared across threads, however, if you keep reading, there is a notion of "correct" sharing. obviously these values may be visible, that's why double-checked locking was used for so long before people realized it was broken. it worked most of the time, except when it didn't, and that's what i'm trying to show. that the only way to correctly share state between threads is via synchronization points, the most common being volatile and synchronized (there are a couple of other less used ones which don't apply here). The articles you linked to below from ibm cover the "visibility" in great depth, this is exactly what i am referring to.
You also state that volatile is a solution, but you seem to rebut your self in stating that the overhead for volatile is almost as great as synchronization.
This article illustrates the solution, and also comments on the overhead of volatile.
http://www.ibm.com/developerworks/library/j-jtp03304/
linked from
http://www.ibm.com/developerworks/java/library/j-dcl.html
volatile is a solution, in that it is correct, and you avoid the appearance of synchronization each time. however, since the semantics of volatile were strengthened in the new memory model, using volatile will perform practically (if not exactly) the same as simply synchronizing each time. the article you link to says exactly this under the heading "Does this fix the double-checked locking problem?".
Also could you be more specific about the example at the end of the jvm memory spec page, like a section number?It's the very last thing on the page, the "discussion" under 17.9, where it mentions that changes to "this.done" made by other threads may never be visible to the current thread. -
Cmos (rtc) battery replacement for hp G62-b25sa
Hello!
Could anybody help me to replace CMOS (RTC) battery for my laptop HP G62-b25sa pls? And How can I find the correct CMOS battery for this model HP G62-b25sa ?Hi,
The following manuals will shows you correct part # and how to replace it:
http://h10032.www1.hp.com/ctg/Manual/c02641795.pdf
http://h10032.www1.hp.com/ctg/Manual/c02542455.pdf
Regards.
BH
**Click the KUDOS thumb up on the left to say 'Thanks'**
Make it easier for other people to find solutions by marking a Reply 'Accept as Solution' if it solves your problem. -
Where can I purchase the motherboard for T60 model 2623-KEU?
Hello ALL:
Please advice where can I purchase the motherboard for T60 model 2623-KEU?
The BIOS password was locked while term. employee refuse to tell the password.
Any way, how much it will cost? Is it possible to replace the motherboard by myself?
If not, how much will be charge for all the service to replace motherboard?
[email protected]
Charlih Chen
IT Engineer
www.fortinet.comwjli2 wrote:
you could easily hack the BIOS..... while the battery removal process can't reset the password like other laptops can.... all the hacking software are on the web for free download....
Don't go down this road or this thread will disappear. BIOS/Password hacking is not to be discussed on this forum.
T60 2623-D7U, 3 GB Ram. Dual boot XP and Linux Mint.
T400 2765-T7U Windows 7
Registered Linux User #160145
FYI: I am not employed by Lenovo -
How much is the OOW replacent for iPhone 5c with liquid damage?
I dropped my phone in a water puddle and I just want to know the price for a replacement .
Check this:
Model
Out-of-warranty service fee
Battery service*
iPhone 6 Plus
$329
$79
*available only if battery
fails Apple’s diagnostic test
iPhone 6
$299
iPhone 5s, iPhone 5c, iPhone 5
$269
iPhone 4s
$199
iPhone 4, iPhone 3GS, iPhone 3G,
Original iPhone
$149
Plus a $6.95 shipping fee, if required. Fees are in USD and exclude local tax. Pricing is for service through Apple. The final service fee we charge will be determined during testing and may be less than the service fee listed above. Pricing and terms vary for service through an Apple Authorized Service Provider.
copied from Apple - Support - Service Answer Center -
Replacement for defective iMac G5
I've been offered a replacement for my Rev B iMac G5, after it was unsucessfully reapaired three times in its warranty for the same problem (inverter replaced once and logic board replaced twice for a video issue). Will I receive another iMac G5 or an Intel model?
Thanks.
iMac G5 Rev B Mac OS X (10.4.6) iMac G5, PowerBook G4I have been told by the sales dept. that it will indeed be an Intel model!
The Apple people who misinformed me were not speaking from experience or knowledge obviously, just assuming I would get, in their words, a "like for like" machine. Being the first ones to take my calls, it's safe to assume they're not specialists. I'll come here next time!
Maybe you are looking for
-
"this photo is unavailable" after 7.4.0.102 upgrad...
After allowing Skype 7.3.0.101 to update to the latest version, 7.4.0.102, I was no longer able to send or receive picture files. Non picture files such as ZIP archives work fine. I ran through the numerous suggestions for this issue but none fixed i
-
Can the 30" HD Display be used for HDTV?
I was wondering if it is possible to use Apple's 30" display for HD television. I am not talking about the signal going through the computer, as Microsoft does with their media center. I am talking about the display being plugged in directly to the H
-
ARD 2.2 Admin Crashes When Scanning Local Network
Out of the blue, my ARD Admin application began to crash when scanning the Local Network. I deleted the application's preferences file (com.apple.RemoteDesktop.plist) and retried with the same results. Installed ARD admin application on a different m
-
Repacking Oracle 9i client for distrubution
Can anyone provide assistance? I have made a few MSI's of this and they do not work very well. Am currently trying to follow Oracle's instructions for their software packager with no luck at all. I keep banging my head looking for osb.bat (which is n
-
IPad iOS 7.0.2 POP mail messages come in as "read" (no blue dot)
Using a POP mail account on my iPad 4 iOS 7.0.2, my new messages are either coming in without a blue dot or sometimes the dot is there but then goes away without my having read the mail. This is a recent phenomenon and the same account is behaving p