Go4Expert (http://www.go4expert.com/)
-   Meet and Greet (http://www.go4expert.com/community/meet-and-greet/)
-   -   HELP with threads and processes (http://www.go4expert.com/community/help-threads-processes-t24825/)

alex_d 2Feb2011 10:34

HELP with threads and processes

Concurrent programming using processes and threads
The objectives of this project are:
1. Being Familiar with programming using processes and threads.
2. Familiar with thread communication mechanisms (shared memory) and processes
(For files)
3. Make use of library calls to manage processes and threads.
4. Compare concurrent programming using threads versus processes.
Develop a program in C to solve the 8 Queens problem. The problem is
placing 8 queens on a chessboard without being able to capture each other using the motions
traditional chess. In other words, look for settings in which the queens
match on the same diagonal, column or row of the board. There are several solutions to this
problem depend on the selected initial configuration, ie the selected position
on the board for the first queen.
You want to get a solution to this problem concurrently, creating multiple
processes or threads so that each is responsible for seeking a solution. For this purpose, you must
implement two versions of the program: reinas_p in which they use processes and reinas_t
using threads.
- queens_p [-n <num_trabajadores>] [-i {0 | 1}]
- queens_t [-n <num_trabajadores>] [-i {0 | 1}]
Num_workers-n is the number of processes or threads (depending on the version
run) to carry out the work, the default value is 81.
-I <0 | 1> is an option to indicate whether workers should print their results after
to complete its execution. If the option is 0 indicates that the option to print
1 Note that if a command specifying a parameter appears between the symbols [] indicates that this parameter
is optional. If you see in {}, are concerned that one must choose between the options presented.
workers are not enabled. If the option is 1, print the result as workers
indicated below. The default value is 0.
Applications will be developed using the schema master / slave. In other words,
be a process (or thread) that only coordinate the implementation of the task, and a set of processes / threads
who will perform the processing.
1. The process / thread teacher should:
distribute the work between processes / threads workers, giving each a
leader board with a queen-up (from this board will start the worker
placing the other 7 Queens). The initial generation and distribution boards are
will be as follows:
Initial board 1: Reina in position (0.0) 1 worker
Initial Board 2: Queen in position (1.0) the worker 2
Initial Board 8: Queen in position (7.0) to work 8
Initial Panel 9: Queen in position (0.1) to work 9
Initial Board 16: Queen in position (7.1) to work 16
Initial board i: Reina in place ((i-1) mod8 (i-1) / 8) the worker
/ / To complete the number of workers
Note that the generation of the initial board shall be by column, starting with
position (0.0) and following the training ((i-1) mod8 (i-1) / 8), where i is the i-th
worker (workers are starting to list from 1).
while the processes / threads workers perform their calculations, the process / thread
expected principal;
workers once completed, must report how many and which solutions
several were found, with their respective times (for two equal solutions,
report less time). The output format is as follows:
Total No. of different solutions: 2
Solution 1: (4.0) (2.1) (0.2) (5.3) (7.4) (1.5) (3.6) (6.7)
Minimum time: 30 msec.
No. of times found: 2
Solution 2: (2.0) (5.1) (3.2) (0.3) (7.4) (4.5) (6.6) (1.7)
Minimum time: 44 msec.
No. of times found: 1
Where the pairs (i, j) represent the positions of the 8 queens on the board. Weather
reported is the least time consuming to find that solution when it was
found by several workers.
2. Processes / threads employees must:
seek a solution from the leader board. Your job ends when
get a solution or determine that no solution to the initial board;
count the time from work;
inform the process / thread main screen and print the result and time
consumed if the print option is active. Print Example
Results of the thread 1:
Solution: Not Found
Time: 20 ms.
Initial board: (1.0)
Results of the thread 2:
Solution: (2.0) (5.1) (3.2) (0.3) (7.4) (4.5) (6.6) (1.7)
Time: 20 ms.
Initial board: (2.0)
For the version with processes, workers must pass the necessary information
Home page through a text file that will create when his work. The
that each worker generates file should be named TI_i_j (Initial Board ij, where (i, j)
represents the position of the first queen).
For its part, the wireless version will use shared variables to transmit
Main information workers.
Important notes:
1. If programs do not compile or not is not BE
CORRECTED. Programs must be compiled and run on any
stations (Linux) of the LDC. If you completed the program at home or USB, but some
other hardware-software platform, you must ensure before the project delivery
Linux works at stations above.
2. Use the POSIX library calls for the establishment and operations on the strings
3. For version reinas_p to use fork and exec calls
4. Should not neglect the use of memory.
5. Must conform to the output formats, but can complement it with graphics
6. Should make use of the makefile, if not given a Makefile, be deemed to
project can not be compiled.
7. They should make a modular and clear. Remember to use libraries and headers files (. H).
8. You can use the following routine to define the function that invoked the threads (reinas_t) and
executable process child processes invoked through exec (reinas_p).
This algorithm is in the book of Niklaus Wirth (Algorithms + Data Structures = Programs.)
Must adapt to your project because you get all possible solutions. Note that it is not
written in C.
# Define FALSE 0
# Define TRUE 1
int a [1 .. 8] / / a [i] = TRUE indicates that there is a queen in the i-th column
int b [2 .. 16] / / b [i] = TRUE indicates that there is a queen in the i-th
/ / Diagonal from the upper right
/ / To the lower left
int c [-7 .. 7] / / c [i] = TRUE indicates that there is a queen in the i-th
/ / Diagonal from the left end
/ / Top to the bottom right
int x [1 .. 8] / / indicates the position of the queen in the ith column
void try (int i)
int j
for (j = 1 to 8)
if (a [j] and b [i + j] and c [i, j]) then
x [i] = j
a [j] = FALSE
b [i + j] = FALSE
c [i, j] = FALSE
if (i <8) Then try (i +1) else print result
a [j] = TRUE
b [i + j] = TRUE
c [i, j] = TRUE
main ()
for (i = 1 to 8) a [i] = TRUE
for (i = 2 to 16) b [i] = TRUE
for 9i =- 7 to 7) c [i] = TRUE
try (1)
end :crazy:

All times are GMT +5.5. The time now is 08:57.