On Mon, 11 Dec 2006, Lars Hjemli wrote:Your pseudo-algorithm is dubious: name = generate_cache_name(request); top: if (!exists(name)) { if (lock_cache(name)) { generate_cache(request, name); unlock_cache(name); } else { sched_yield(); goto top; } } else if (expired(name)) { if (lock_cache(name)) { generate_cache(request, name); unlock_cache(name); } } print_file(name); You really should have: if (!exists) { if (!lock) delay-and-repeat; /* RETEST exists _after_ getting the lock */ if (!exists) { generate into lock-file mv lockfile exists; } else { rm lockfile } } because you really want to re-check the existence after you got the lock, otherwise you would race with somebody else that got the lock, generated the data, and then unlocked (and you got the lock _after_ the data was generated, so now you generate it unnecessarily). As a side note: how do you release your caches? Linus - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
| Davide Libenzi | Re: [patch 7/8] fdmap v2 - implement sys_socket2 |
| Bart Van Assche | Integration of SCST in the mainstream Linux kernel |
| Greg Kroah-Hartman | [PATCH 005/196] Chinese: add translation of SubmittingDrivers |
| Mariusz Kozlowski | [KJ PATCHES] mostly kmalloc + memset conversion to k[cz]alloc |
git: | |
| KOSAKI Motohiro | [bug?] tg3: Failed to load firmware "tigon/tg3_tso.bin" |
| Stefan Richter | Re: [GIT]: Networking |
| David Miller | Re: [PATCH] pkt_sched: Destroy gen estimators under rtnl_lock(). |
| Gerrit Renker | [PATCH 0/37] dccp: Feature negotiation - last call for comments |
