联系方式

  • QQ:99515681
  • 邮箱:99515681@qq.com
  • 工作时间:8:00-23:00
  • 微信:codinghelp

您当前位置:首页 >> Web作业Web作业

日期:2020-10-30 11:04

Week 4 – Coursework

This document outlines the coursework for the first half of SCC.211. Before providing details some

reminders pertaining to the coursework:

1) You must submit your coursework onto Moodle before demoing.

2) We will be unable to provide support in Week 5 labs, which are dedicated to solely marking. I

will be running evening sessions in Week 4 – this is your best chance to seek clarification on

the exercise.

3) You are not allowed to use any pre-existing concurrency libraries – doing so will result in an

automatic fail on any submitted coursework. Using operations that ‘hide the complexity’ of

the underlying concurrency primitive makes it impossible for us to determine whether you

fully understand what is occurring. If you are unsure what this entails let me know ASAP.

4) Part of your marks will be based on appropriate use of classes, commenting, and formatting.

Make sure that the editor which displays your code formats correctly.

5) Further details on the grading criteria can be found in the marking guidelines document.

Programming Exercise

You will be working with the files found under WK4_coursework, which are incomplete and will not

compile. This program shares similar functionality to the one provided in Week 3.

In this program X users will add elements onto a single buffer object, which are removed by Y

webservers. The number of users, webservers and elements are all specified by user input, and

resembles the following:

Enter buffer capacity

20

Enter number of users

10

Enter number of servers

10

Enter number of total elements

100

The program must automatically divide the number of inputted elements evenly across all users (even

for odd values), while webservers attempt to remove elements from the buffer as evenly as possible.

The action of adding and removing elements from the buffer must be performed concurrently, and

will resemble the following in mid execution:

User 8 adds an element 1/20

User 6 adds an element 2/20

User 9 adds an element 3/20

User 0 adds an element 4/20

Serv 2 removed element 3/20

User 1 adds an element 4/20

Serv 5 removed element 3/20

Serv 6 removed element 2/20

The program must also continue to operate even if the buffer is empty or full, with the user or

webserver waiting until the buffer is again available. An example of this will resemble the following

when the buffer is empty:

Serv 6 removed element 2/20

Serv 3 removed element 1/20

Serv 2 removed element 0/20

Buffer empty – web server wait

Buffer empty – web server wait

User 2 added an element 1/20

User 6 added an element 2/20

And will resemble the following when the buffer is full:

User 9 added an element 19/20

User 5 added an element 20/20

Buffer full – User now sleeping

Serv 1 removed element 19/20

User 8 added an element 20/20

Buffer full – User now sleeping

Buffer full – User now sleeping

Serv 2 removed element 19/20

Once all users and server have completed processing all elements, the program should output

something resembling the following:

-----------------------

User 7 created a total of 10 elements

User 5 created a total of 10 elements

User 0 created a total of 10 elements

User 6 created a total of 10 elements

User 8 created a total of 10 elements

User 1 created a total of 10 elements

User 2 created a total of 10 elements

User 3 created a total of 10 elements

User 9 created a total of 10 elements

User 4 created a total of 10 elements

Consumer 9 consumed a total of 10 elements

Consumer 1 consumed a total of 10 elements

Consumer 3 consumed a total of 10 elements

Consumer 6 consumed a total of 10 elements

Consumer 4 consumed a total of 10 elements

Consumer 0 consumed a total of 10 elements

Consumer 7 consumed a total of 10 elements

Consumer 2 consumed a total of 10 elements

Consumer 5 consumed a total of 10 elements

Consumer 8 consumed a total of 10 elements

As well as check that the buffer is empty, and that all created threads have completed:

-----------------------

Buffer has 0 elements remaining

-----------------------

Program took 10052 milliseconds to complete

Please note that the time does not need to be exactly the same – this will be entirely dependent on

the number of elements processed by user defined values for users and webservers.

Your assignment is to make this program function correctly – allowing for concurrent access between

users and servers on a single buffer. You must demonstrate to us that the program will operate in a

thread-safe manner under the following scenarios:

1) Program correctly operated under any scale of buffer size, number of users, web servers, and

elements

2) Buffer is frequently empty (i.e. web servers removes elements faster than users add)

3) Buffer is frequently full (i.e. users adds elements faster than web servers remove)

To demonstrate 2 and 3 I would advise that you use the java thread sleep method on users and web

servers to control their execution. However do be advised that we will likely be asking you to disabling

thread sleep for actual demonstration, so many sure you test your code without it.

Important: You are NOT allowed to use the synchronized keyword within any of your methods

EXCEPT within synchronization primitive classes that you have designed yourself (i.e. semaphores,

locks). This is to allow us to ask questions for you to demonstrate understanding on concurrency

concepts.

When you are ready to demo, myself or one of the TAs will sign off your work.


相关文章

【上一篇】:到头了
【下一篇】:没有了

版权所有:编程辅导网 2018 All Rights Reserved 联系方式:QQ:99515681 电子信箱:99515681@qq.com
免责声明:本站部分内容从网络整理而来,只供参考!如有版权问题可联系本站删除。