C :: Implement Mutex Lock Using Atomic Hardware Instruction
Mar 25, 2014
Consider how to implement a mutex lock using an atomic hardware instruction. Assume that the following structure defining the mutex lock is available:
Code:
typedef struct {
int available;
}
lock; (available == 0)
indicates that the lock is available, and a value of 1 indicates that the lock is unavailable. Using this struct, illustrate how the following functions can be implemented using the test and set() and compare and swap() instructions:
I was trying to put mutex lock on shared memory but my code is not working. What I want is that if some process is putting something on shared memory segment, other process should not be able to access that segment. For testing , I create a server program which put data in shared memory and client program which access the data.
To test it, I put break point after:
pthread_mutex_lock(&(init_lock));
But I see that client program was able to access shared memory.
I have problems when implementing the IDIV Instruction in gcc assembler, the program has compiled ok, but when executing function that imparts the asm codes which contained the IDIV instruction the error box immediately appeared announcing that it should terminates the program quickly.
The following is the complete listing of the program that I just been working on it:
#include <iostream> #include <cstdio> #include <cstdlib> using namespace std; signed long divider(signed long num, signed long divisor); int main(int argc, char* argv[]) { signed long dn0,dn1,dn2;
[code]....
I compiled it with DevCpp 4.9.9.2, and I had tried on CodeBlocks, in CodeBlocks I made used the int64_t type but still it could not works more..
I am using atomic instructions on x64 and variables so used must be 16 byte aligned.
I use a number of structures where their members are so operated upon.
The structures accordingly needs must be 16 byte aligned and padded - their internal members must be on 16 byte boundaries and, crucially, there must be tail padding to a 16 byte boundary, so I can allocate arrays of these structures and use pointer math to iterate. (I am naturally using aligned malloc).
The problem I am finding is that it is not apparent to me how to achieve this end. Here below we have a test structure (currently I'm working with the latest Amazon Linux GCC, 4.6.3, on x64);
The problem manifest is that sizeof(struct test_element) is 40 bytes! So the second element does not begin on a 16 byte boundary and we all fall down. Printing the addresses of the first element in the test element array, I see the following;
So we see fe->next is the first element and so is correctly aligned curtsey of aligned malloc, where fe->next is 16 bytes, fe->user_data is correctly aligned, but then te->thread_number is misaligned and te->datum is given eight bytes rather than four, leaving us in the end without correct tail padding to a 16 byte boundary.
So, what gives? how *am* I supposed to indicate to the compiler it must pad structures to 16 byte boundaries?
If any exception occurs in critical section code then what sort of issue which we see in terms of synchronization objects?
Before and after the critical section code, Mutex is locked and unlocked. But if any exception occurs then the waiting thread will be waiting for resource to be freed as Mutex is not unlocked due to the exception.
For a larger program I need a way to tell if a "lock knob" is going clockwise or counterclockwise. So below, I have my MoveLock function (That our teacher actually gave us to use) that reads inputs from the arrow keys and displays them. But what I need is to be able to count each time its moved in the correct direction and to reset the count it if it has gone in the other. Right now I'm just testing if it's going clockwise. I thought to solve this by resetting the count if it was less than the returned value from MoveLock (which is a count to compare to the former). Currently, it only displays the current position and the count as -1 or 1.
I am trying to compare performance of different lock-free queues, therefore, I want to create a stress test - which includes pushing/popping user-defined pre-built objects to and from the queue. My question is how can perform the stress test with pushing and popping objects instead of pointers to object like I have done in my code. What is the different in terms of performance of pushing/popping objects Vs. pushing/popping pointers.
I am working on a paint program (already quite well developed) and I have a 'Resize' option in my Menu. When pressed it activates a custom dialog for resizing the image with 2 numeric up/downs to adjust width and height. It all works perfectly. But I want to include an 'Aspect Lock' checkBox like a professional program would have. It should immediately change both values as you adjust either one.
Here's where I am totally stumped! Of course I have tried and tried various codes, but nothing works properly. My values jump erratically or won't change at all. I wonder if trying to change the value of one numeric up/down while inside the code block for changing the value of the other one has got them screwing with each other somehow. Any example code that could accomplish what I'm trying to do?
I m trying to lock a single skeleton using Microsoft Kinect SDK v 1.7 . My requirements are
•First lock a single skeleton. •Check the tracking state of the of the locked skeleton. •If the tracking state of the locked skeleton is NOT Tracked,then • ----->check for the next closest skeleton •----->lock this skeleton.
How do I do this using vc++2010. The code which i tried is given below.
I'm trying to learn how to implement vectorization. Lets say I have this an array like this.
Code: int Array[10] = { 3,4,5,3,4,5,6,7,8,9};
If I traverse through the array and preform some simple calculation like adding numbers, how would I go about vectorizing this feat? For example if I want to add numbers, .
An example, add element at index 5,6,7 to element with index 1.
I have to make a prgrama using the C programming language that is able to read several lines of commands entered by the user and interpret it as a command to run.
I have to implement the following command:
a) Command generic - program should be able to read any one command and execute the same command on the operating system through primitives for implementing generic processes (eg "ls-l/etc").
for (int i=0;i<number;i++){ printf("enter %d th string::",i+1); scanf("%s",str[i]); }
Above, I have a little snippet of a code that I'm trying to figure out. I don't really understand how to implement 2d arrays in C that well. But, I mostly want to know is how and where the strings are being stored, especially with the code below.
Code: for (int i=0;i<number;i++){ printf("enter %d th string::",i+1); scanf("%s",str[i]); }
I know that it's asking the user to enter strings, which will be stored into the 2d array. I just don't understand how it's being stored. Will it be placed in the 1st column or 2nd row or something?
I'm trying to implement the flocking algorithm in C++. I've tried to implement it myself by making all the particles 'home-in' on the player. When 2 particles then collide within their larger bounding boxes they home-in to each other. And when the 2 particles are actually touching they repel each other until they are outside of their bounding boxes and find another particle to home-into.when I run my application the particles all home into the player and come to a stand still along the Y-axis above the player.
All the particles in question are stored in a Vector, with a pos and velocity.
for(int i = 0; i < swarm.size(); i++) { for (int j = 0; j < swarm.size(); j++) { if (swarm.at(i)->getParticleModel()->getPosition().x < gameObjects.front()->getParticleModel()->getPosition().x) { if (swarm.at(i)->getParticleModel()->getTouching() == false)
Ok so i am coding in WPF i was coding just fine and im trying to implement a browserDialog
Here is the class
The issue i am having is in the DialogResult.Cancel This is the issue i receive 'System.Nullable<bool>' does not contain a definition for 'Cancel' and no extension method 'Cancel' accepting a first argument of type 'System.Nullable<bool>' could be found (are you missing a using directive or an assembly reference.
I do this because I want to transform the .x format into xml... The "frame" data structure can contain other frames, and a name for the frame and a transformation. For example:
I know the above won't compile. But am I on the right track to implement data structures this way using linked lists? about directx, I'd like to ask is the .x format implemented with a tree structure rather than linked lists.