02-26-2004
Quote:
Originally posted by Perderabo
I didn't really follow all of that, but I would try to go in one of two directions...
1) Lose that memory queue
--snip--
2) Lose that pipe
--snip--
1) Well, the memory queue is a requirement because the pipe has a byte limit and given the threaded nature and the need for mutex protection it is possible that I run up against a deadlock because the read thread is trying to lock a structure to handle a request and the write thread has it locked but can put it on the pipe because of the byte limit.
I found that out the hard way...and that's why the single byte on and off to prevent this.
2) That's so close to polling it might as well be polling and would decrease the overall responsiveness of the system because I'd have to wait for socket events, switch to wait for response events, and then back. This also wastes CPU cycles as most polling type activity does...and that's bad practice IMO.
As for the race condition...there really is not worry there. First the mutex will protect the memory queue. So a thread putting a request on it has a consistent view of whether it is the first to put a request on or not. The thread taking the data off then (after it locks the mutex) has a consistent view of whether that item is the "last" item. If another is to be added the mutex has to be aquired, which it can not be until the read thread either removes the byte and the request (or the write thread places the byte and the "first" request).
What I'm really looking for is a way to, maybe with fcntl, make a file (rather than a pipe...maybe one open to /dev/null) readable and then non-readable so that a select can see the readable flag set, and then I can clear it. This is acheived with the single byte outstanding on the pipe...but I'm looking for a cleaner way.
Thanks for the suggestions, if you have any more ideas I'd love to hear them.
10 More Discussions You Might Find Interesting
1. Programming
Hi,
I have written a daemon process, to perform certain operations in the background.
For this I have to close, the open file descriptors,
Does anybody know how to find out the number of open file descriptors ?
Thanks in Advance,
Sheetal (2 Replies)
Discussion started by: s_chordia
2 Replies
2. UNIX for Advanced & Expert Users
Hello all,
A few questions on file descriptors ...
scenario : Sun Ultra 30 with Sun OS 5.5.1 , E250 with Solaris 2.6
In one of my servers, the file descriptor status from the soft limit and hard limits are 64 and 1024 respectively for root user.
Is the soft limit (64) represents the... (3 Replies)
Discussion started by: shibz
3 Replies
3. UNIX for Dummies Questions & Answers
i m trying to learn processes in unix and i've been reading this but i don't quite get it. its regarding file descriptors. : each is a part of file pointers, they point to another area. indexes into an Operating system maintained table called "file descriptor table". one table per process. may... (3 Replies)
Discussion started by: a25khan
3 Replies
4. Shell Programming and Scripting
Greetings,
I have a troubling problem with a Korn Shell concept that I know works in Solaris.
Essentially I am assigning file descriptors to a coprocess. Also, it should be noted that I am not using the public domain ksh but, rather AT&T ksh93.
Here is a test scenario:
$ sqlplus -s... (5 Replies)
Discussion started by: tmarikle
5 Replies
5. Programming
I am in a Systems programming class this semester, and our current project is to write a program utilizing sockets and fork. For the project, I decided to make my own instant messaging program. I have the code completed, but I have a problem that keeps old clients from communicating with new... (3 Replies)
Discussion started by: gstlouis
3 Replies
6. UNIX for Advanced & Expert Users
Hi All,
This thread is going to be a discussion basically bringing out more information from the experts on cron jobs and the associated file handles.
So, here is the question.
There is definitely a constant ' n ' as the maximum number of file handles alloted to a process ' p '.
Will... (7 Replies)
Discussion started by: matrixmadhan
7 Replies
7. HP-UX
Hi,
I speak and write english more or less, so I hope my asking be clear.
:)
In the company I am working, they are using control-m software to lunch
shell scripts.
So i put this command in all shell scripts:
export LOGFILE_tmp=$PRODUC_DATA/tmp/${SCRIPT}_${PAIS}_`date... (0 Replies)
Discussion started by: anamcara
0 Replies
8. UNIX for Dummies Questions & Answers
What is the difference between a file descriptor and a semaphore?
My basic understanding is:
- a file descriptor is a small positive integer that the system uses instead of the file name to identify an open file or socket.
- a semaphore is a variable with a value that indicates the... (1 Reply)
Discussion started by: Mr_Webster
1 Replies
9. Shell Programming and Scripting
I have a file that is 20 - 80+ MB in size that is a certain type of log file.
It logs one of our processes and this process is multi-threaded. Therefore the log file is kind of a mess. Here's an example:
The logfile looks like: "DATE TIME - THREAD ID - Details", and a new file is created... (4 Replies)
Discussion started by: elinenbe
4 Replies
10. Shell Programming and Scripting
Hi, I'm playing with KSH
I entered following command in terminal
{ echo "stdout" >&1; echo "stderr" >&2; } > out
And I get only stoud in a new file out.
My question is: Where did my stderr vanish ? (5 Replies)
Discussion started by: solaris_user
5 Replies
LEARN ABOUT DEBIAN
gearman_worker_timeout
GEARMAN_WORKER_TIMEOUT(3) Gearmand GEARMAN_WORKER_TIMEOUT(3)
NAME
gearman_worker_timeout - Gearmand Documentation, http://gearman.info/
SYNOPSIS
#include <libgearman/gearman.h>
gearman_worker_st
gearman_worker_set_task_context_free_fn
int gearman_worker_timeout(gearman_worker_st *worker)
void gearman_worker_set_timeout(gearman_worker_st *worker, int timeout)
void *gearman_worker_context(const gearman_worker_st *worker)
void gearman_worker_set_context(gearman_worker_st *worker, void *context)
void gearman_worker_set_workload_malloc_fn(gearman_worker_st *worker, gearman_malloc_fn *function, void *context)
void gearman_worker_set_workload_free_fn(gearman_worker_st *worker, gearman_free_fn *function, void *context)
gearman_return_t gearman_worker_wait(gearman_worker_st *worker)
gearman_return_t gearman_worker_register(gearman_worker_st *worker, const char *function_name, uint32_t timeout)
gearman_return_t gearman_worker_unregister(gearman_worker_st *worker, const char *function_name)
gearman_return_t gearman_worker_unregister_all(gearman_worker_st *worker)
gearman_job_st *gearman_worker_grab_job(gearman_worker_st *worker, gearman_job_st *job, gearman_return_t *ret_ptr)
void gearman_job_free_all(gearman_worker_st *worker)
bool gearman_worker_function_exist(gearman_worker_st *worker, const char *function_name, size_t function_length)
gearman_return_t gearman_worker_work(gearman_worker_st *worker)
Link with -lgearman
DESCRIPTION
gearman_worker_st is used for worker communication with the server.
gearman_worker_context() and gearman_worker_set_context() can be used to store an arbitrary object for the user.
gearman_worker_set_task_context_free_fn() sets a trigger that will be called when a gearman_task_st is released.
gearman_worker_timeout() and gearman_worker_set_timeout() get and set the current timeout value, in milliseconds, for the worker.
gearman_worker_function_exist() is used to determine if a given worker has a specific function.
Normally malloc(3) and free(3) are used for allocation and releasing workloads. gearman_worker_set_workload_malloc_fn() and
gearman_worker_set_workload_free_fn() can be used to replace these with custom functions.
If you need to remove a function from the server you can call either gearman_worker_unregister_all() to remove all functions that the
worker has told the gearmand server about, or you can use gearman_worker_unregister() to remove just a single function.
RETURN
Various
HOME
To find out more information please check: http://gearman.info/
SEE ALSO
gearmand(8) libgearman(3)
AUTHOR
Data Differential http://www.datadifferential.com/
COPYRIGHT
2012, Data Differential, http://www.datadifferential.com/
0.33 May 04, 2012 GEARMAN_WORKER_TIMEOUT(3)