30 Day Risk-Free Guarantee:
100% money back if you're unsatisfied.
Book (308 Pages):
  • 150 Programming Interview Questions and Solutions
  • Five Proven Approaches to Solving Tough Algorithm Questions
  • Ten Mistakes Candidates Make -- And How to Avoid Them
  • Steps to Prepare for Behavioral and Technical Questions
  • Interview War Stories: A View from the Interviewer's Side
  • Book Preview and More Info

Video (One Hour):
  • Watch CareerCup's founder perform a totally unscripted technical interview of a candidate.
  • Overview of what interviewers look for in software engineering jobs.
  • Technical questions with white-boarding coding where the candidate does well - and struggles.
  • Interviewer reviews with what went well and poorly.
  • Video Preview and More Info

Resume Review (24 - 48hr)
  • Get your resume reviewed by a trained engineering interviewer. More Info
All Products / Services


Express Prep Package (Book)
$29.99 for e-book | $32.45 for paperback
Buy E-Book Buy on Amazon


Standard Prep Package (E-Book & Video)
Emailed Instantly | $39.99
Buy Standard

Elite Prep Package (E-Book, Video & Resume)
Emailed Instantly | $99.99
Buy Elite
 





Mr.Mackey on November 13, 2009 |Edit | Edit

i would make use of an atomic instruction like the test_and_set in x86 but instead of keeping the threads spinning and waiting..log them into a queue for both fairness and not wasting CPU cycles..

Anonymous on December 01, 2009 |Edit | Edit

Rather block myself when I fail to get a spinlock and wait on a queue. Periodically, I will poll for the lock and repeat step 1.

Anonymous on December 16, 2009 |Edit | Edit

Use a TSL to set the lock's state. Based on the value returned by the TSL decide whether to block itself or enter the critical region.

Anonymous on January 13, 2010 |Edit | Edit

Q could be a simple FCFS or a thread priority based queue.
Pseudocode:


void mutex_lock_blocking(Mutex* mhandle, Thread* thandle)
{
spinlock_lock(mhandle->spinlock);
if(! is_Q_empty(mhandle->queue))
{
Q_push(thandle);
// Blocks thread. Scheduler can schedule threads with runnable == TRUE
thread->sched_runnable = FALSE;
spinlock_unlock(mhandle->spinlock);
// Calls the thread scheduler. Returns only when some other threas sets runnable = TRUE
// for the current thread.
scheduler_yield();
}
thread->sched_runnable = FALSE;
Q_push(thandle);
spinlock_unlock(mhandle->spinlock);

return;
}

void mutex_unlock(Mutex* mhandle, Thread* thandle)
{
spinlock_lock(mhandle->spinlock);
// Remove self from the Q
Q_remove(thandle);
// Mark next thread on Q. But do not pop it yet. next_runnable_thandle will resume
// resume execution just after returning from scheduler_yield() from mutex_lock_blocking
next_runnable_thandle = Q_get_next();
next_runnable_thandle->runnable = TRUE;
spinlock_unlock(mhandle->spinlock);
}

isisme on January 27, 2010 |Edit | Edit

volatile int lock = 0;

void Critical() {
while (TestAndSet(&lock) == 1);
critical section //only one process can be in this section at a time
lock = 0 //release lock when finished with the critical section
}

Add a Text Comment | Add Runnable Code
Name:
Comment:

Writing Code? Surround your code with {{{ and }}} to preserve whitespace.








Amazon (1033)Bloomberg LP (403)Qualcomm (117)Adobe (88)Goldman Sachs (78)NetApp (49)IBM (43)Morgan Stanley (33)CapitalIQ (30)Sophos (25)Achieve Internet (23)Electronic Arts (19)Motorola (18)Research In Motion (17)Flipkart (16)
Microsoft (867)Google (141)NVIDIA (98)Yahoo (82)Epic Systems (69)Expedia (47)VMWare Inc (43)Apple (32)Cisco Systems (28)Facebook (23)Infosys (22)Agilent Technologies (19)Sage Software (17)Deshaw Inc (16)FlexTrade (15)
More Companies »
Software Engineer / Dev... (1062)Financial Software Deve... (170)Testing / Quality Assur... (56)Analyst (35)Virus Researcher (25)Field Sales (15)Developer Program Engin... (9)Front-end Software Engi... (6)MyJoB (5)area sales manager (4)Assistant (3)Cabin crew (2)Accountant (1)personnel (1)Intern (1)
Software Engineer in Te... (288)Program Manager (65)Development Support Eng... (47)INTERN(MSIDC) (28)Web Developer (18)System Administrator (10)Consultant (10)Production Engineer (5)Associate Technology L2 (5)AcquireKnowledge (4)Product Security Engine... (3)Solutions Architect (2)Gamer (1)mts (1)Fresh graduate interview (0)
More Job Titles »
Algorithm (1073)Terminology & Trivia (294)C (166)Object Oriented Design (159)Java (121)Testing (114)Arrays (101)Operating System (78)Database (70)Linked List (62)String Manipulation (56)Networking / Web / Inte... (44)Threads (36)Linux Kernel (33)PHP (22)
Coding (511)C++ (204)Behavioral (159)Data Structures (155)Experience (116)Brain Teasers (111)Computer Architecture &... (79)General Questions and C... (73)Trees and Graphs (69)Math & Computation (57)Application / UI Design (45)Ideas (38)System Design (35)Puzzles (30)Bit Manipulation (20)
More Topics »
CareerCup Official Interview Book Daily Questions Requests for Help Mock Interviews Video for Cracking the Coding Interview Job Placement Service CareerCup Blog
My Profile Edit Profile & Email Settings Sign Out