Sponsored Content
Top Forums Programming Ideas: 'select'ing file descriptors Post 48114 by DreamWarrior on Thursday 26th of February 2004 03:47:54 PM
Old 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

File Descriptors

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

File Descriptors

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

file descriptors

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

File descriptors problem perplexing me

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

Sockets and File descriptors

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

File Descriptors + cron

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

exec and file descriptors

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

Semaphores and File Descriptors

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

grep'ing and sed'ing chunks in bash... need help on speeding up a log parser.

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

Questions about file descriptors

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
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)
All times are GMT -4. The time now is 10:26 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy