Click here to Skip to main content
15,892,927 members
Home / Discussions / C#
   

C#

 
GeneralCustom permissions Pin
Hans Ruck13-Jan-04 1:43
Hans Ruck13-Jan-04 1:43 
GeneralRe: Custom permissions Pin
Heath Stewart13-Jan-04 5:30
protectorHeath Stewart13-Jan-04 5:30 
GeneralRe: Custom permissions Pin
Hans Ruck13-Jan-04 22:21
Hans Ruck13-Jan-04 22:21 
Generalaxwebbrowser excel mdicontainer Pin
mylitziname12-Jan-04 22:28
mylitziname12-Jan-04 22:28 
GeneralRe: axwebbrowser excel mdicontainer Pin
mylitziname12-Jan-04 23:24
mylitziname12-Jan-04 23:24 
GeneralEnvironment variable Pin
cfl12-Jan-04 22:03
cfl12-Jan-04 22:03 
GeneralRe: Environment variable Pin
mylitziname12-Jan-04 23:33
mylitziname12-Jan-04 23:33 
GeneralRe: Environment variable Pin
Heath Stewart13-Jan-04 5:15
protectorHeath Stewart13-Jan-04 5:15 
GeneralRe: Environment variable Pin
cfl13-Jan-04 15:42
cfl13-Jan-04 15:42 
General.NET version dependent compilation Pin
brain2cpu12-Jan-04 21:09
professionalbrain2cpu12-Jan-04 21:09 
GeneralRe: .NET version dependent compilation Pin
Heath Stewart13-Jan-04 5:12
protectorHeath Stewart13-Jan-04 5:12 
QuestionDragDrop to a native window? Pin
TuringTest112-Jan-04 19:20
TuringTest112-Jan-04 19:20 
AnswerRe: DragDrop to a native window? Pin
Heath Stewart13-Jan-04 5:07
protectorHeath Stewart13-Jan-04 5:07 
GeneralRe: DragDrop to a native window? Pin
TuringTest113-Jan-04 5:55
TuringTest113-Jan-04 5:55 
Generalasking for system tray application Pin
azusakt12-Jan-04 16:25
azusakt12-Jan-04 16:25 
GeneralRe: asking for system tray application Pin
Jeff Mackie12-Jan-04 17:16
sussJeff Mackie12-Jan-04 17:16 
GeneralRe: asking for system tray application Pin
azusakt12-Jan-04 17:51
azusakt12-Jan-04 17:51 
GeneralRe: asking for system tray application Pin
Heath Stewart13-Jan-04 4:53
protectorHeath Stewart13-Jan-04 4:53 
Questionreturning when inside a lock - is it safe? Pin
Brandon Haase12-Jan-04 15:29
Brandon Haase12-Jan-04 15:29 
I've run into a situation I haven't seen before, and was wondering if someone with a bit more threading experience would like to chime in.

The class IsoCurrencyInfo maintains a collection of IsoCurrencyInfo singletons. The instances of IsoCurrencyInfo class themselves are read-only once created, so by themselves are thread-safe. The trick is keeping the ArrayList container in line. I think I have it nailed, but in doing so I am executing a return statement while inside a lock().

The code works very well under heavy concurrent load Cool | :cool: , but I can't help wondering "Is this safe?" Is there a better way to structure this method to optimize the locking?

I have adapted the Singleton implementation pattern[^] from Microsoft Patterns & Practices[^].

public static IsoCurrencyInfo GetInstance(string isoCode) 
{
	IsoCurrencyInfo newICI = null;

	if(null == _iciRegistry)
		lock(syncRoot) 
			if(null == _iciRegistry)
			{
				_iciRegistry = new ArrayList();

				newICI = new IsoCurrencyInfo(isoCode);
				_iciRegistry.Add(newICI);
			}
	if(null == newICI) 
		lock(syncRoot) 
		{
			foreach(IsoCurrencyInfo existingICI in _iciRegistry)
				if(existingICI.AlphaCode == isoCode)
					return existingICI;

			newICI = new IsoCurrencyInfo(isoCode);
			_iciRegistry.Add(newICI);
		}
	return newICI;
}

Thanks!
B
AnswerRe: returning when inside a lock - is it safe? Pin
Heath Stewart13-Jan-04 4:46
protectorHeath Stewart13-Jan-04 4:46 
GeneralRe: returning when inside a lock - is it safe? Pin
Brandon Haase13-Jan-04 16:13
Brandon Haase13-Jan-04 16:13 
AnswerRe: returning when inside a lock - is it safe? Pin
scadaguy13-Jan-04 5:23
scadaguy13-Jan-04 5:23 
GeneralRe: returning when inside a lock - is it safe? Pin
Brandon Haase13-Jan-04 16:28
Brandon Haase13-Jan-04 16:28 
Generalremoting access Pin
haih12-Jan-04 15:23
haih12-Jan-04 15:23 
GeneralRe: remoting access Pin
Heath Stewart13-Jan-04 4:31
protectorHeath Stewart13-Jan-04 4:31 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.