#include <pthread.h>
#include <stdio.h>
// Simplest way to create a mutex, no function calls needed
pthread_mutex_t lock=PTHREAD_MUTEX_INITIALIZER;
// When two threads must use the same memory, you must use
// mutex calls to make it safe. It's not just a lock, it's also a
// "memory barrier", guaranteeing memory values between different CPU cores
// are synchronized properly.
int running=1;
void *thread(void *arg)
{
fprintf(stderr, "Thread beginning\n");
while(1)
{
int r;
fprintf(stderr, "thread waiting for lock\n");
// If main already has the mutex, thread will sleep.
// when main unlocks it, the thread will lock it and continue.
pthread_mutex_lock(&lock);
fprintf(stderr, "We have the mutex, it is safe to get value of 'running'\n");
r=running;
fprintf(stderr, "Value of 'running' is %d\n", r);
pthread_mutex_unlock(&lock); // What gets locked MUST be unlocked later!
fprintf(stderr, "thread has given up the lock\n");
if(r == 0) break;
sleep(1);
}
fprintf(stderr, "thread finishing\n");
return((void *)0xdeadbeef);
}
int main()
{
void *ret;
pthread_t tid;
running=1;
pthread_mutex_lock(&lock); // Stop thread from getting the mutex
fprintf(stderr, "main now has the mutex\n");
pthread_create(&tid, NULL, thread, NULL);
sleep(2); // Thread will begin, but wait for mutex
fprintf(stderr, "main is unlocking the mutex\n");
pthread_mutex_unlock(&lock); // Let the thread run for a while
sleep(5);
// Lock the mutex, making it safe to alter 'running'
pthread_mutex_lock(&lock);
fprintf(stderr, "main now has the mutex\n");
running=0;
fprintf(stderr, "main is unlocking the mutex\n");
pthread_mutex_unlock(&lock);
pthread_join(tid, &ret);
fprintf(stderr, "Thread finished with return value %p\n", ret);
}
Im old to Unix but new to scripting
I have a MacBook running osx that I want to use as an nfs client. The server will be a linux box with a wake on lan card. Here's the idea. Run a cron command on the mac every minute that checks if I am on my home wireless network (the linux box is wired to... (0 Replies)
m old to Unix but new to scripting
I have a MacBook running osx that I want to use as an nfs client. The server will be a linux box with a wake on lan card. Here's the idea. Run a cron command on the mac every minute that checks if I am on my home wireless network (the linux box is wired to... (6 Replies)
I have two threads: one maintains a thread-safe message queue (handle this queue at the beginning of every loop) and deals with tcp connections, the other one posts message to the former one. the problem is, while the former one was blocking at epoll_wait, it's not sure that how long until the... (0 Replies)
Hello, I'm searching for a proper way to let the kernel space ISR(implemented in a kernel module) wake up a user space thread on a hardware interrupt.
Except for sending a real-time signal, is it possible to use a semaphore?
I've searched it on google, but it seems impossible to share a... (0 Replies)
This is a very crude attempt in Bash at something that I needed but didn't seem to find in the 'sleep' command. However, I would like to be able to do it without the need for the temp file. Please go easy on me if this is already possible in some other way:
How many times have you used the... (5 Replies)
Hi all,
Is it possible to do the following in Linux (kernel 2.6.x):
- A user-space thread goes to "sleep". Using any call/mechanism
- On a hardware generated interrupt, the Interrupt handler (ISR) "wakes" the sleeping user-thread.
I have seen wait_event() and wake_up() but it appears... (1 Reply)
I'm a OS X user (MacBook Pro, OS X Lion) and I need it to wake up on Mondays, Wednesdays, Thursdays and Saturdays at 9:00 AM
on the rest of the days of the week at 7:00
I issue the following commands:
sudo pmset repeat wake MWRS 09:00:00 for the former
sudo pmset repeat wake TFU... (1 Reply)
Discussion started by: scrutinizerix
1 Replies
LEARN ABOUT MOJAVE
pthread_mutex_unlock
PTHREAD_MUTEX_UNLOCK(3) BSD Library Functions Manual PTHREAD_MUTEX_UNLOCK(3)NAME
pthread_mutex_unlock -- unlock a mutex
SYNOPSIS
#include <pthread.h>
int
pthread_mutex_unlock(pthread_mutex_t *mutex);
DESCRIPTION
If the current thread holds the lock on mutex, then the pthread_mutex_unlock() function unlocks mutex.
Calling pthread_mutex_unlock() with a mutex that the calling thread does not hold will result in undefined behavior.
RETURN VALUES
If successful, pthread_mutex_unlock() will return zero, otherwise an error number will be returned to indicate the error.
ERRORS
The pthread_mutex_unlock() function will fail if:
[EINVAL] The value specified by mutex is invalid.
[EPERM] The current thread does not hold a lock on mutex.
SEE ALSO pthread_mutex_destroy(3), pthread_mutex_init(3), pthread_mutex_lock(3), pthread_mutex_trylock(3)STANDARDS
The pthread_mutex_unlock() function conforms to ISO/IEC 9945-1:1996 (``POSIX.1'').
BSD July 30, 1998 BSD